2017-07-16 68 views
0

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

  #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

似乎[为我工作](http://rextester.com/ODZ5710) –

+0

你使用什么编译器和版本? – Galik

+0

“我明白ECMAScript语法(默认)不支持[0-9]语法” - 是的,它的确如此。 –

回答

-1

“直到不久之前,libstdC++中的正则表达式支持才被破解,而Ubuntu 14.04附带的版本可能仍然是一个糟糕的版本。” - Matteo Italia

“gcc 4.8?已知是越野车,直接转到v6或7! - Richard Hodges

谢谢!