4

可能重复:
gcc4.7 对正则表达式有问题吗?

我按照http://www.cplusplus.com/reference/std/regex/regex_match/上的示例并在 Ubuntu 12.04 64 位上使用 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]

请注意,在我的机器上[bject]被提取,这是不正确的。有任何想法吗?

4

2 回答 2

3

根据gcc 实施状态(4.6.3 版),正则表达式库尚未完全实施。它不会引发错误,也不会提供警告。这确实令人不快。

但是,其他人之前已经观察到了这一点,也有更新的版本:

常见的建议是进一步使用Boost.Regex或尝试使用其他编译器。

请参阅此答案以进一步阅读。

于 2012-10-16T10:38:44.023 回答
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 实现中的一个错误。

于 2012-10-16T09:18:38.340 回答