ecmascript — 수정된 ECMAScript 정규식 문법

ecmascript — 수정된 ECMAScript 정규식 문법 (Modified ECMAScript regex grammar)

이 페이지는 std::basic_regexsyntax_option_typeECMAScript(기본값)로 만들 때 사용되는 정규식 문법을 설명해요. 다른 문법은 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 문법부터 시작하는 것이 가장 익숙하고 편리해요.

더 알아보기 (Learn more)

cppreference