2017-04-06 59 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

這是誰的bug - clang或gcc?這是誰的bug - clang或gcc?

+4

海灣合作委員會幹線打印'真實',所以我認爲答案是顯而易見的。 –

+5

問題標題很具誤導性。這個問題永遠無法通過搜索找到。請使標題更具描述性,並將關鍵字添加到正則表達式中。 –

+0

@瑞安這是這個\ - –

回答

4

g ++(或更確切地說是stdlibC++)出現錯誤。

根據ECMAScript規範,轉義減號字符應該在字符類中逐字處理。 libstdC++不能這樣做。它可以在一個簡單的例子來seeon

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

GCC說沒有匹配,各種正則表達式測試人員說有。