2013-11-17 2 views
8

Я попытался использовать регулярное выражение C++ 11, но не удалось даже в тривиальных примерах. Со стороны, кажется, только сравнивать строки, например:Странные результаты при использовании C++ 11 regexp с gcc 4.8.2 (но работает с Boost regexp)

std::regex_match(std::string{""}, std::regex{"a?"}) // false (???) 
std::regex_match(std::string{"a?"}, std::regex{"a?"}) // true (???) 

В отличие от этого, библиотека регулярных выражений подпиточного ведет себя, как я ожидал бы:

boost::regex_match(std::string{""}, boost::regex{"a?"}) // true (OK) 
boost::regex_match(std::string{"a?"}, boost::regex{"a?"}) // false (OK) 

я тестировал с GCC 4.8.2 и clang 3.4 (также используя библиотеку STL GCC). Либо библиотека сломана, либо я не понимаю синтаксис, определенный стандартом C++ 11.

+0

http://gcc.gnu.org - НКУ "СЕЙЧАС регулярное выражение реализованного Должен прийти с GCC 4.9 :)." поддержка регулярных выражений очень новая. – chris

+0

Я думаю, проблема в грамматике. – deeiip

+1

clang с [своей собственной библиотекой] (http://libcxx.llvm.org/) дает true, а затем false, то же, что и boost.regex. GCC 4.8.2 не поддерживает регулярное выражение, вам нужно 4.9. – Cubbi

ответ

7

Это не поддерживается в GCC 4.8.x. Проверьте соответствующий Bugzilla запись:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631

В частности:

+0

Почему 4.8.x компилирует регулярные выражения успешно беззвучно, заставляя меня наполовину безумие, а не бросать ошибку или предупреждение? –

+0

Посмотрите [здесь] (http://stackoverflow.com/questions/12530406/is-gcc-4-8-or-earlier-buggy-about-regular-expressions) за причину –