ecmascript — 수정된 ECMAScript 정규식 문법
ecmascript — 수정된 ECMAScript 정규식 문법 (Modified ECMAScript regex grammar)
이 페이지는 std::basic_regex가 syntax_option_type을 ECMAScript(기본값)로 만들 때 사용되는 정규식 문법을 설명해요. 다른 문법은 syntax_option_type 문서를 참고해요.
C++에서의 ECMAScript 3 정규식 문법은 ECMA-262 5.1 표준을 기반으로 하고 있어요.
출처: cppreference
본문
기본 구조
ECMAScript 문법은 JavaScript 정규식과 기본적으로 같고, C++ 추가 기능(예: 클래스 축약 \d)과 일부 차이가 있어요.
#include <regex>
// 기본값이 ECMAScript
std::regex re("(a+)(b*)");
패턴 요소
문자
x // 리터럴 문자
. // 개행 제외 아무 문자
[abc] // 문자 클래스
[^abc] // 부정 문자 클래스
[a-z] // 범위
양화사 (Quantifiers)
a* // 0회 이상
a+ // 1회 이상
a? // 0회 또는 1회
a{2,4} // 2~4회
a*? // 게으른(lazy) 매칭
앵커/경계
^ // 문자열 시작
$ // 문자열 끝
\b // 단어 경계
그룹/백레퍼런스
(a) // 캡처 그룹
(?:a) // 비캡처 그룹
\1 // 첫 번째 그룹 참조
(a|b) // 선택
이스케이프/클래스
\d // 숫자
\w // 단어 문자
\s // 공백
\D, \W, \S // 부정
std::regex re(R"(\b\w+@\w+\.\w+\b)"); // 이메일 형태
std::string s = "contact [email protected] now";
std::smatch m;
if (std::regex_search(s, m, re)) {
// m[0] = "[email protected]"
}
특징
- 기본 문법이라
std::regex re("...")만으로 바로 사용할 수 있어요. - C++의
\d같은 실제 줄바꿈 처리 등에서 순수 ECMAScript와 약간 다를 수 있어요. - 다른 문법(POSIX, grep 등)은
syntax_option_type으로 선택해요.
std::regex posix("a.b", std::regex::extended); // POSIX 확장 문법
정규식을 C++에서 처음 쓸 때는 이 기본 ECMAScript 문법부터 시작하는 것이 가장 익숙하고 편리해요.