3

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

#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.

如何解决这个问题,有什么问题?

4

3 回答 3

6

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

将这些选项之一-std=c++0x-std=gnu++0x, 添加到您的编译器命令中:

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

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

于 2012-12-12T09:45:20.727 回答
2

看起来您正在尝试使用正则表达式类,它是新 C++11 标准的一部分,但没有告诉编译器编译到该标准。

将 -std=c++0x 添加到您的编译器标志并重试。

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

于 2012-12-12T09:46:21.190 回答
2

只需添加

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

或者

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

它会正常工作

于 2015-09-29T11:42:33.603 回答