分段错误c ++正则表达式

时间:2017-02-10 17:42:10

标签: regex c++11 segmentation-fault

当我尝试使用一些正则表达式时,我收到了“分段错误”。在此示例中,第一个正则表达式工作正常,但第二个正则表达式产生了分段错误:

#include <regex>
#include <iostream>

using namespace std;

void out(const string& s, const string& d,bool b) { cout << s << ", " << d << (b ? "=found" : "=not found") << endl; }

int
main()
{
    const auto exp1 = string{"<.*>.*</.*>"};
    const auto reg1 = regex{exp1};
    const auto data1 = string{"<tag>value</tag>"};
    const auto found1 = regex_match(data1, reg1);
    out(exp1, data1, found1);

    const auto exp2 = string{"<(.*)>.*</\\1>"};

    cout << "About to create the regex!" << endl;
    const auto reg2 = regex{exp2};
    cout << "done." << endl;

    const auto data2 = string{"<tag>value</tag>"};
    const auto found2 = regex_match(data2, reg2);
    out(exp2, data2, found2);

    cout << "All done!" << endl;
}

我这样编译:

g++ -O0 -g -Wall -Wpedantic -std=c++11    try3.cpp   -o try3

当我运行它时,我得到了这个:

$ ./try3
<.*>.*</.*>, <tag>value</tag>=found
About to create the regex!
Segmentation fault

我使用libstdc ++运行CentOS版本5.11 - 4.1.2-55.el5

1 个答案:

答案 0 :(得分:1)

这是因为GCC 4.1开始实现正则表达式,但直到稍后才准备好使用。

请参阅Is gcc 4.8 or earlier buggy about regular expressions?