我正在尝试在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.
如何解决这个问题以及出了什么问题?
答案 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>
它会正常工作