2017-03-21 11 views
1

나는 파이썬 정규식했습니다C++ (11) 정규식 혼란

  • 서명을/서명되지 않은 | 합리적인/소수/정수 | 번호 | with/exponent

하지만 C++ 11 정규식 형식과 혼동 스럽습니까? 내가 읽었으니 지원되는 몇 가지 형식이 있지만이 정규식 파서 예외가 발생합니다. 더, 나는 그 그룹이 C++ 11 정규식으로 지원되지 않는다는 것을 읽었습니다.

동일한 스키마를 제공하는 C++ 11 호환 정규식을 갖는 방법은 무엇입니까?

도움 주셔서 감사합니다.

답변

1

당신은 이름을 캡처 그룹을 보존 할 수는 없지만, 당신은 자세한 방법으로 패턴을 정의하는 문자 여러 줄 문자열을 사용할 수 있습니다

std::string pat = "^\\s*"  // optional whitespace at the start, then 
     "([-+]?)"    // an optional sign, then 
     "(?=\\.?\\d)"   // lookahead for digit or .digit 
     "(\\d*)"    // numerator (possibly empty) 
     "(?:"     // followed by 
      "(?:/(\\d+))?"  // an optional denominator 
     "|"     // or 
      "(?:\\.(\\d*))?" // an optional fractional part 
      "(?:E([-+]?\\d+))?" // and optional exponent 
     ")" 
     "\\s*$";    // and optional whitespace to finish 
std::regex e(pat); 
std::string s(" -23/34 "); 
std::smatch a; 
if (std::regex_search(s, a, e)) 
    std::cout << a[0] << endl; 

C++ demo

+0

당신이 바위를 참조하십시오. 정보는 여기서 사용하는 정규식 스타일은 무엇입니까? posix? –

+1

아니요, ECMAScript 5입니다. POSIX는 미리보기를 지원하지 않으며 여기에'(? = \\.? \\ d)'가 있습니다. –