이것은 libstdC++의 구현 버그입니다. 이보기 :
#include <string>
#include <regex>
#include <boost/regex.hpp>
#include <iostream>
int main() {
{
using namespace std;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
{
using namespace boost;
regex my_r("(.*)(6)(.*)");
smatch m;
if (regex_match(std::string{"123456789"}, m, my_r)) {
std::cout << m.length(1) << ", "
<< m.length(2) << ", "
<< m.length(3) << std::endl;
}
}
return 0;
}
당신은 GCC로 컴파일 할 경우
는 첫 번째 (된 libstdc는 ++)이 완전히 잘못된 결과
9, -2, 4와 두 번째 (부스트의 구현)
5, 1, 3을 반환에게 반환을 예상대로 사용하십시오.
clang + libC++로 컴파일하면 코드가 정상적으로 작동합니다.
(http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52719에 설명 된대로이 된 libstdC++의 정규식 구현은, "부분적으로 지원"참고.)
정규 표현식 구현은 gcc와 MSVC에서 여전히 매우 낮습니다. – inf
감사합니다. gcc 4.6.3을 사용하고 있습니다. –
g ++ 4.7로 업그레이드했지만 여전히 동일한 출력. 나는 여전히 이것이 정규 표현식에 대한 오해라고 생각한다. 너무 자주 나는 과거의 실수로 소프트웨어를 비난했다. –