我按照http://www.cplusplus.com/reference/std/regex/regex_match/上的示例编译并使用g ++版本4.6.3在64位Ubuntu 12.04上编译
以下是我的输出:
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]
请注意,在我的机器上 [bject] 被提取,这是不正确的。有什么想法吗?
答案 0 :(得分:3)
根据gcc implementation status (ver 4.6.3),正则表达式库尚未完全实现。它不会抛出任何错误,也不会提供任何警告。这确实是令人不快的。
然而,其他人之前已经观察过这种情况,也有更新的版本:
常见的建议是进一步使用Boost.Regex或尝试其他编译器。
请参阅this answer进一步阅读。
答案 1 :(得分:0)
您可以将示例缩小为:
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实现中的一个错误。