C++ 11 정규 표현식을 사용하여 중괄호 일치 내용을 추출하고 싶다고 가정 해 보겠습니다. 예를 들어, {foo}
이 성공적으로 일치하고 내용을 추출하려면 match_result
을 사용할 수 있습니다. 그것은 간단 보이지만, 다음 코드는 매우 내가C++ 정규 표현식 중괄호 안의 내용 일치
std::string foo("{foo}");
std::regex r("\\{(.*)\\}");
std::smatch m;
bool result = regex_match(foo, m, r); // result returns true
cout << m[0] << endl; // prints: {foo}
cout << m[1] << endl; // prints: {foo} instead of just foo as I would expect
지금 중괄호가 첫 번째 캡처 그룹이라고 m[1]
수익을 제공하지 말아야 단지 foo
없이 할 일을하지 않는 이유는 무엇입니까?
EDIT :이 질문에 대한 필수 정보는 GCC 4.6.3 (현재 Ubuntu 12.04 LTS의 최신 저장소 버전)입니다. 그 답은 GCC에서 정규 표현식에 대한 지원이 얼마나 열악한지를 정확하게 나타냅니다.
참고. – inf
컴파일러/표준 라이브러리? gcc/libstdC++를 포함한 대부분의 컴파일러/표준 라이브러리는 정규식 지원을 완전히 구현하지 못했습니다. – Artyom