C ++ 11 match_regex与简单模式不匹配

时间:2013-11-17 15:39:37

标签: c++ regex c++11 match

我在使用C ++中的新正则表达式库时遇到了一些麻烦。这是一个简单的例子:

#include<regex>
#include<string>
#include<iostream>

using namespace std;

int main(){
    string text = "123.456";
    string pattern = "[0-9]+\\.[0-9]+";
    try{
        cout << (regex_match(text, regex(pattern, regex_constants::extended)) ? "Pass\n" : "Fail\n");
    }catch(...){
        cout << "Fail (bad regex)\n";
    }
    return 0;
}

问题是,无论我使用什么类型的匹配(简单,扩展,grep,egrep,awk等),它总是返回false。如果我使用“regex_constants :: simple”它会抛出异常,因为不支持括号表达式,但我检查了规范,它应该可以正常使用“regex_constants :: extended”。

结果如下:

rhobincu@daneel:~/work$ g++ -std=c++11 test.cpp -o test
rhobincu@daneel:~/work$ ./test 
Fail

知道我做错了吗?

编辑:这也可能是有用的信息:

rhobincu@daneel:~/work$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

1 个答案:

答案 0 :(得分:6)

GCC's libstdc++current status尚不支持

regex

您只需将std::regex替换为boost::regex即可编译并正常运行。