2017-04-06 8 views
-2
#include <regex> 
#include <string> 
#include <iostream> 

using namespace std; 

bool IsMatched() 
{ 
    string str = R"(Liy_0-3863)"; 
    string re = R"([:\-_a-zA-Z\d]+)"; 

    auto flags = std::regex_constants::ECMAScript; 
    return std::regex_match(str.data(), 
     std::regex(re.data(), re.size(), flags)); 
} 

int main() 
{ 
    cout << boolalpha << IsMatched(); 
} 
  • 打ち鳴らす4.0出力true
  • gcc 6.2出力false

これはバグですか?clangまたはgccですか?これはバグですか?clangまたはgccですか?

+4

GCCトランクは 'true'を出力するので、答えは明らかだと思います。 –

+5

質問タイトルは非常に誤解を招く。この質問は、検索することで決して見つけることはできません。問題のタイトルをよりわかりやすくし、キーワードに正規表現を追加してください。 –

+0

@ライアンそれはこれです\ –

答えて

4

g ++(またはむしろstdlibC++)がエラーになります。

ECMAScript仕様によれば、エスケープされたマイナス文字は文字クラス内で文字どおり扱われるべきです。 libstdC++は失敗します。もっと単純な例を見てください。

string: a-b 
    regex: [a\-b]+ 

gccにはマッチはありませんが、さまざまな正規表現検査者があると言います。

関連する問題