C ++中的Regex:需要编译器支持错误

时间:2012-12-12 09:43:15

标签: c++ regex compiler-construction

我正在尝试在C ++中使用regex。以下是我的代码:

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<regex>
using namespace std;

int main(int argc, char** argv) {
    string A = "Hello!";
    regex pattern = "(H)(.*)";
    if (regex_match(A, pattern)) {
        cout << "It worked!";
    }
    return 0;
}

但是我遇到了这个错误:

In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/regex:35:0,
                 from main.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

如何解决这个问题以及出了什么问题?

3 个答案:

答案 0 :(得分:6)

  

并且必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用

在编译器命令中添加其中一个选项-std=c++0x-std=gnu++0x

  

g ++ -std = c ++ 0x ...

请注意,如果不支持std::regex,请参阅boost::regex以获取替代方案。

答案 1 :(得分:2)

看起来你正在尝试使用regex类,它是新C ++ 11标准的一部分,但没有告诉编译器编译成该标准。

将-std = c ++ 0x添加到编译器标志中,然后重试。

编辑:正如the gcc implementation status page所示,gcc中的正则表达式支持远未完成。因此,即使添加正确的标志也无济于事。如果您需要正则表达式支持,可以尝试boost

答案 2 :(得分:2)

只需添加

即可
g++ -std=gnu++0x <filename.cpp>

g++ -std=c++0x <filename.cpp>

它会正常工作