C ++ 11 std :: regex_match, возвращающий дополнительный символ

Возможный дубликат:
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]

Обратите внимание, что на моей машине [▪ Таблица] извлечено что не правильно. Есть идеи?

4

Решение

Согласно Состояние реализации gcc (версия 4.6.3) библиотека regex еще не полностью реализована. Он не выдает ошибок и не выдает предупреждений. Что неприятно, действительно.

Однако другие уже наблюдали это раньше, с более поздними версиями:

Общее предложение заключается в дальнейшем использовании библиотека Boost.regex или попробовать другой компилятор.

Увидеть этот ответ для дальнейшего чтения.

3

Другие решения

Вы можете уменьшить пример до:

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.

0

По вопросам рекламы [email protected]