我使用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),我只是从我试过的测试中得到了这个想法。
答案 0 :(得分:-1)
“libstdc ++中的正则表达式支持非常破碎,直到不久之前,Ubuntu 14.04附带的版本可能仍然很糟糕。” - Matteo Italia
“gcc 4.8?被称为地狱车。立刻转到v6或7!” - Richard Hodges
谢谢!