std :: regex捕获组语法错误

时间:2017-07-16 16:26:18

标签: c++ regex c++11 std

我使用c ++ 11 std :: regex-es遇到了一些非常奇怪的行为。 它反复抛出std :: regex_error异常,即使是捕获组内容中最基本的调整,所以我写了一些测试用例并检查了每一个,下面是结果。

            #include <regex>

            std::regex reg;

1  error    reg.assign("[0-9]");
2           reg.assign("[0-9]", std::regex_constants::extended);
3           reg.assign("[0-9]*", std::regex_constants::extended);
4  error    reg.assign("([0-9])", std::regex_constants::extended);
5  error    reg.assign("([0-9]*)", std::regex_constants::extended);
6  error    reg.assign("a([0-9])", std::regex_constants::extended);
7  error    reg.assign("a([0-9]*)", std::regex_constants::extended);
8           reg.assign("[0-9]+([0-9]*)", std::regex_constants::extended);
9           reg.assign("[a-z]+([0-9]*)", std::regex_constants::extended);
10          reg.assign("a(.*)");
11          reg.assign("a(.*)", std::regex_constants::extended);

我理解ECMAScript语法(默认)不支持[0-9]语法,但扩展语法有,所以我的问题是:

为什么4,5,6和7不工作,如果8和9呢?

更新#1:

默认语法,ECMAScript支持它(感谢Neil Butterworth),我只是从我试过的测试中得到了这个想法。

1 个答案:

答案 0 :(得分:-1)

“libstdc ++中的正则表达式支持非常破碎,直到不久之前,Ubuntu 14.04附带的版本可能仍然很糟糕。” - Matteo Italia

“gcc 4.8?被称为地狱车。立刻转到v6或7!” - Richard Hodges

谢谢!