为什么正则表达式“([a-z])((?!\\ 1)[a-z])”在C ++ 11中匹配字符串“aa”?

时间:2016-10-21 18:01:07

标签: c++ regex c++11

确实在跑步

regex pattern("([a-z])((?!\\1)[a-z])");
cout << regex_match("aa", pattern) << endl;

导致输出“1”,但匹配的第一组是“a”,如果相反我运行

regex pattern("([a-z])((?!a)[a-z])");
cout << regex_match("aa", pattern) << endl;

我按预期得到“0”。

请注意,完全相同的正则表达式在Python 3中的工作方式与预期相同,即运行

re.match("([a-z])((?!\\1)[a-z])", "aa")

不产生任何匹配。有人能解释一下这里发生了什么吗?

仅供参考,我使用的是带有标志-O2和-std = c ++ 11的g ++(tdm64-1)5.1.0。

1 个答案:

答案 0 :(得分:3)

因为它在GCC5中被窃听 它在GCC6MSVC14中按预期工作。