Возможный дубликат:
Gcc4.7 содержит ошибки в регулярных выражениях?
Я последовал примеру на http://www.cplusplus.com/reference/std/regex/regex_match/ и скомпилирован на Ubuntu 12.04 64-bit с g ++ версии 4.6.3
Вот мой вывод:
string literal matched
string object matched
range matched
string literal with 3 matches
string object with 3 matches
range with 3 matches
the matches were: [subject] [sub] [bject]
В то время как пример вывода:
string literal matched
string object matched
range matched
string literal with 3 matches
string object with 3 matches
range with 3 matches
the matches were: [subject] [sub] [ject]
Обратите внимание, что на моей машине [▪ Таблица] извлечено что не правильно. Есть идеи?
Согласно Состояние реализации gcc (версия 4.6.3) библиотека regex еще не полностью реализована. Он не выдает ошибок и не выдает предупреждений. Что неприятно, действительно.
Однако другие уже наблюдали это раньше, с более поздними версиями:
Общее предложение заключается в дальнейшем использовании библиотека Boost.regex или попробовать другой компилятор.
Увидеть этот ответ для дальнейшего чтения.
Вы можете уменьшить пример до:
std::string s("subject");
std::regex e("(sub)(.*)");
std::smatch sm;
std::regex_match(s, sm, e);
еще интереснее
std::string s("subject");
std::regex e("(sub)(ject)");
std::smatch sm;
std::regex_match(s, sm, e);
Итак, это похоже на ошибку в реализации GNU.