这是谁的错 - 铿锵还是gcc?

时间:2017-04-06 09:08:57

标签: c++ c++11 gcc clang standards

#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();
}
  • clang 4.0 输出true;
  • gcc 6.2 输出false

这是谁的错 - clang或gcc?

1 个答案:

答案 0 :(得分:4)

g ++(或更确切地说是stdlibc ++)出现错误。

根据ECMAScript规范,应该在字符类中逐字处理转义的减号字符。 libstdc ++没有这样做。它可以在一个更简单的例子上看到

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

gcc说没有匹配,各种正则表达式测试人员说有。不过。