2016-11-18 5 views
3

C++ 11 RegEx에 약간의 문제가 있습니다. 나는 greedynes에 관한 것 같아요.C++ 11 RegEx, non-greedy

다음은 약간의 샘플입니다.

#include <stdio.h> 
#include <string> 
#include <regex> 

int main (void) 
{ 
    std::string in="{ab}{cd}[ef]{gh}[ij][kl]"; // the input-string 

    std::regex rx1 ("(\\{.+?})(.*)", std::regex::extended);  // non-greedy? 
    std::smatch match; 

    if (regex_match (in, match, rx1)) 
    { 
    printf ("\n%s\n", match.str(1).c_str()); 
    } 

    return 0; 
} 

나는 출력

{ab} 

을 기대. 는하지만 욕심이 아니라 함께 내가 할 경우 내가, 내가 얻을 결과를 기대

{ab}{cd}[ef]{gh} 

있어? . + 후에. 욕심이 없어야할까요?

내 생각에 무슨 문제가 있습니까? 도움 주셔서 감사합니다!

크리스

+0

이 왜 그러나 당신이 닫는 중괄호를 탈출하지 않는'\\ {'로 여는 중괄호를 탈출 할 보는가? – Bobulous

+0

@Bobulous는 이전 패턴을 반복하는 데 도움이되는 정규식 특수 문자입니다 .. –

+1

'std :: regex :: extended'를 사용해서는 안됩니다. 정규식 POSIX ERE를 준수하며 지연 량 한정 기호를 지원하지 않습니다. –

답변

2

당신은 당신의 정규식 POSIX ERE 준수하게하고, 그 정규식 맛은 게으른 한정사를 지원하지 않습니다는 std::regex::extended을 제거해야합니다.

std::regex rx1("(\\{.+?})(.*)"); 

이 (가) C++ demo