2017-07-16 1 views
0

私は11 ++ std :: regex-esを使ってかなり奇妙な振る舞いに遭遇しました。 キャプチャグループの内容に最も基本的な調整を加えてstd :: regex_error例外を繰り返しスローしたので、いくつかのテストケースを書き、それぞれを調べました。その結果は以下のとおりです。std :: regexグループ構文のエラーを捕らえる

  #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); 

は、私が[0-9]構文をサポートしていませんECMAScriptの文法(デフォルト)を理解しますが、拡張された文法はありませんので、私の質問は:

なぜない4、5、6 8と9の場合、7つの仕事がありますか?

更新#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

ありがとうございます!

関連する問題