2017-07-16 67 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

謝謝!