Namespaces
Variants

std::regex_constants:: syntax_option_type

From cppreference.net
헤더 파일에 정의됨 <regex>
using syntax_option_type = /* implementation-defined */ ;
(1) (C++11부터)
constexpr syntax_option_type icase = /* unspecified */ ;

constexpr syntax_option_type nosubs = /* unspecified */ ;
constexpr syntax_option_type optimize = /* unspecified */ ;
constexpr syntax_option_type collate = /* unspecified */ ;
constexpr syntax_option_type ECMAScript = /* unspecified */ ;
constexpr syntax_option_type basic = /* unspecified */ ;
constexpr syntax_option_type extended = /* unspecified */ ;
constexpr syntax_option_type awk = /* unspecified */ ;
constexpr syntax_option_type grep = /* unspecified */ ;

constexpr syntax_option_type egrep = /* unspecified */ ;
(2) (C++11부터)
(C++17부터 inline)
inline constexpr syntax_option_type multiline = /* unspecified */ ;
(3) (C++17부터)
1) syntax_option_type 은 정규 표현식의 동작 방식을 제어하는 옵션들을 포함하는 BitmaskType 입니다.
2,3) 타입 (1) 의 가능한 값들( icase , optimize 등)은 std::basic_regex 내부에 중복되어 있습니다.

목차

상수

문법 옵션 효과
ECMAScript 수정된 ECMAScript 정규 표현식 문법 을 사용합니다.
basic 기본 POSIX 정규 표현식 문법을 사용합니다 ( 문법 문서 ).
extended 확장 POSIX 정규 표현식 문법을 사용합니다 ( 문법 문서 ).
awk POSIX에서 awk 유틸리티가 사용하는 정규 표현식 문법을 사용합니다 ( 문법 문서 ).
grep POSIX에서 grep 유틸리티가 사용하는 정규 표현식 문법을 사용합니다. 이는 기본적으로 basic 옵션과 동일하지만, 줄바꿈 ' \n ' 을 대체 구분자로 추가합니다.
egrep POSIX에서 grep 유틸리티가 -E 옵션과 함께 사용하는 정규 표현식 문법을 사용합니다. 이는 기본적으로 extended 옵션과 동일하지만, '|' 에 추가로 줄바꿈 ' \n ' 을 대체 구분자로 추가합니다.
문법 변형 효과
icase 문자 매칭 시 대소문자를 구분하지 않습니다.
nosubs 매칭 수행 시 모든 표시된 부분 표현식 ( expr ) 은 비표시 부분 표현식 (?: expr ) 으로 처리됩니다. 제공된 std::regex_match 구조체에 어떤 매치도 저장되지 않으며 mark_count() 는 0입니다.
optimize 정규 표현식 엔진에게 매칭 속도를 높이도록 지시하며, 대신 생성 시간이 더 느려질 수 있습니다. 예를 들어 비결정적 FSA를 결정적 FSA로 변환할 수 있습니다.
collate "[a-b]" 형태의 문자 범위가 로캘을 인식합니다.
multiline (C++17) ECMAScript 엔진이 선택된 경우, ^ 이 줄의 시작 부분과 매치되고 $ 이 줄의 끝 부분과 매치되도록 지정합니다.

문법 옵션 중 최대 하나만 ECMAScript , basic , extended , awk , grep , egrep 에서 선택할 수 있습니다. 문법을 선택하지 않으면 ECMAScript 가 선택된 것으로 간주됩니다. 다른 옵션들은 변형으로 작동하며, 예를 들어 std:: regex ( "meow" , std :: regex :: icase ) std:: regex ( "meow" , std :: regex :: ECMAScript | std :: regex :: icase ) 와 동등합니다.

참고 사항

POSIX는 "가장 왼쪽에서 가장 긴" 매칭 규칙(가장 긴 매칭 부분 시퀀스를 매칭하며, 그러한 부분 시퀀스가 여러 개 있을 경우 첫 번째 것을 매칭함)을 사용하기 때문에, 예를 들어 마크업 언어를 파싱하는 데 적합하지 않습니다: POSIX 정규식 "<tag[^>]*>.*</tag>" 는 첫 번째 "<tag" 부터 마지막 "</tag>" 까지의 모든 내용을 매칭하며, 그 사이에 있는 모든 "</tag>" "<tag>" 를 포함합니다. 반면에 ECMAScript는 비탐욕적(non-greedy) 매칭을 지원하며, ECMAScript 정규식 "<tag[^>]*>.*?</tag>" 는 첫 번째 닫는 태그까지만 매칭합니다.

예제

ECMAScript와 POSIX 정규 표현식 간 매칭 알고리즘 차이를 보여줍니다:

#include <iostream>
#include <regex>
#include <string>
int main()
{
    std::string str = "zzxayyzz";
    std::regex re1(".*(a|xayy)"); // ECMA
    std::regex re2(".*(a|xayy)", std::regex::extended); // POSIX
    std::cout << "Searching for .*(a|xayy) in zzxayyzz:\n";
    std::smatch m;
    std::regex_search(str, m, re1);
    std::cout << "  ECMA (depth first search) match: " << m[0] << '\n';
    std::regex_search(str, m, re2);
    std::cout << "  POSIX (leftmost longest)  match: " << m[0] << '\n';
}

출력:

Searching for .*(a|xayy) in zzxayyzz:
  ECMA (depth first search) match: zzxa
  POSIX (leftmost longest)  match: zzxayy

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2053 C++11 상수들이 static 으로 선언됨 static 지정자를 제거함

참고 항목

정규 표현식 객체
(클래스 템플릿)