본문 바로가기
C++ 200제/코딩 IT 정보

C++ 정규표현식 atrlrx와 표준 regex 사용 시 { } 괄호 차이점과 예제

by vicddory 2018. 11. 10.
반응형

C++ 정규표현식에서 { } 사용 시 주의할 점과 regex 예제


비주얼스튜디오 2005까지 표준 라이브러리로 포함되었던 atlrx.h는 2008부터 표준에서 제외되었습니다. 그리고 시간은 흘러 2018년이 되었는데요. 현재는 비주얼스튜디오 2017에서 C++ regex.h를 인클루드하여 정규표현식(regular expression, 이하 regex)을 사용할 수 있습니다. 



c++ 정규표현식 비주얼스튜디오 예제[regular expression 프로그래밍 문법과 사용법]



정규표현식 자체는 변할 것이 없으므로 VisualStudio 2005나 2017이나 차이가 없습니다. 다만 소스 코드에서 표현할 땐 괄호에서 차이가 발생하는데요.


아래처럼 { } 괄호 한 쌍 사용이 달라졌습니다.




VS 2005 regex


1
{[\d]}
cs



VS 2017 regex


1
[\d]
cs


[\d] 의미 = [ ] 사이의 숫자와의 매칭

정규표현식을 감싸는 { } 기호 한 쌍이 VisualStudio 2017에선 생략됩니다. (2005 이상에서 생략) 그래서 2005에서 사용하던 C++ 정규표현식은 2017에서 사용할 때 { } 괄호 한 쌍을 제거해야 합니다.


또한, 최신툴로 업그레이드 못 하는 상황에서 atlrx.h 참조 추가 오류가 발생할 수 있습니다. 그럴 땐 아래 사이트 ATL Server에서 관련 파일을 다운로드하여 사용하시면 됩니다.


비주얼스튜디오 2005 이하 환경에서 정규표현식 사용하기 위한 라이브러리



비주얼스튜디오 2017을 사용하신다면, 추가로 설치할 라이브러리는 없습니다.


VisualStudio 2005 이하 사용하다가 버전을 올리실 경우 위와 같은 { } 괄호 주의점 꼭 기억하세요.


c++ 정규표현식 url[regular expression 프로그래밍 문법과 사용법] Matching URL 예제




추가로 비주얼스튜디오 2017 C++에서 사용할 수 있는 정규표현식 regex 예제 1개 소개하며 글을 마칩니다.


정규표현식 예제

  1. 정규표현식에 일치하는지 확인하기
  2. 문자열에서 모든 숫자 찾기


예제 소스 (출처 : 초보자를 위한 C++ 200제 [링크])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <regex>
#include <string>
 
using namespace std;
 
int main()
{
    regex re1(R"(\d+)");
    string str1("1234");
 
    bool is_match = regex_match(str1, re1);
 
    cout << boolalpha;
    cout << "is_match = " << is_match << endl;
 
    regex re2(R"(\d+)");
    string str2 = "ab 123456 cd ef";
 
    smatch match_info;
    regex_search(str2, match_info, re2);
 
    cout << "number : " << match_info.str() << endl;
 
    return 0;
}
cs


결과


1
2
is_match = true
number : 123456
cs



c++ 정규표현식 예제 문법 결과[예제 문법 실행 결과]



regex 예제에서 사용한 메타 문자


\d

 검색 조건은 숫자로 합니다.

 +

 앞의 조건을 1번 또는 여러 번 반복합니다.


C++ regex 클래스 객체 생성자엔 ( ) 괄호와 R을 붙여 정규표현식 문법임을 명시합니다. 또한, smatch 클래스엔 정규표현식 수행 결과가 저장됩니다.


위 예제를 수행하면 str1 문자열이 re1에 정의된 표현식과 같다는 결과를 알려주고요. re2를 통해 str2에 있는 모든 숫자가 추출됩니다.


위 예제에서도 확인되듯이, regex 클래스가 지원되며 프로그래머에게 장점이 많아졌습니다. 무엇보다 윈도우 환경에서 정규표현식 소스 코드 구현량이 현격히 줄어들었어요.


C++ 정규표현식 atrlrx와 표준 regex 사용 시 { } 차이점[regular expression 프로그래밍 문법과 사용법]




덧글 1. 위 예제는 초보자를 위한 C++ 200제를 인용했습니다.

덧글 2. 정규표현식을 검사할 수 있는 사이트는 RegExr을 추천합니다.


C++ 정규표현식에서 { } 사용 시 주의할 점과 regex 예제

반응형