2014-09-01 19 views
5

我使用VS2010和编码C++控制台应用程序和所面临的问题regex_match有什么问题?很简单的表达

#include <regex> 
using namespace std; 

//... 

if (!regex_match("abab",regex("(ab?)*"))) 
{ 
    //the problem is - why we are here? why it doesn't match? 
} 

这里http://regexpal.com/检查 - 它匹配

+5

正则表达式库的很多实现都是粗略的,特别是在VS 2010中。请记住,VS 2010不是** C++ 11编译器,它只支持_some_ C++ 11功能。 – 2014-09-01 15:42:45

+0

@CaptainObvlious你是对的!我在VS2012中测试它,这正是正则表达式匹配我的方式。 – 2014-09-01 15:47:00

+0

[与海湾合作委员会合作](http://coliru.stacked-crooked.com/a/65f607082de2cc06)。 – 2014-09-01 15:51:16

回答

0

很简单:regex_match仅当整个序列被匹配返回true。如果你想查看一个字符串是否包含你的正则表达式,你可能需要使用regex_search。

“ab?”匹配“aba”,中继器(“()*”)进行一次匹配。其余的是“b”,所以它不是完全匹配。

对不起,我误读了正则表达式。它应该是完全匹配的。奇怪:

regex_match("aab", regex("(ab?)*")) == true 

似乎是一个使用stl中的错误(使用QT Creator 2010.05测试,makespec = VS2010)。在你的代码中用regex_search替换regex_match是正确的,但match_results是空的 - 表示仍然出错。

使用VS2012所有测试都正确匹配。