This question already has an answer here:
I tried to use C++11's regular expression but failed even in trivial examples. From the outside, it seems to only compare the strings, for example:
std::regex_match(std::string{""}, std::regex{"a?"}) // false (???)
std::regex_match(std::string{"a?"}, std::regex{"a?"}) // true (???)
In contrast, the Boost's regexp library behaves as I would have expected:
boost::regex_match(std::string{""}, boost::regex{"a?"}) // true (OK)
boost::regex_match(std::string{"a?"}, boost::regex{"a?"}) // false (OK)
I tested with GCC 4.8.2 and clang 3.4 (also using GCC's STL library). Either the library is broken, or I do not understand the syntax defined by the C++11 standard.
It's not supported in GCC 4.8.x. Check out the corresponding Bugzilla entry:
Specifically: "Now regex is implemented. Should come with GCC 4.9 :)"
来源:https://stackoverflow.com/questions/20027305/strange-results-when-using-c11-regexp-with-gcc-4-8-2-but-works-with-boost-reg