我不明白这个。GCC 应该支持但根据他们的 http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
状态页面“不支持 7 个正则表达式”。
但随后在“28 正则表达式” - 它们被检查为受支持
http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
您能否解释一下什么是实际标准,什么不是?
我不明白这个。GCC 应该支持但根据他们的 http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
状态页面“不支持 7 个正则表达式”。
但随后在“28 正则表达式” - 它们被检查为受支持
http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
您能否解释一下什么是实际标准,什么不是?
GCC 4.9 确实支持 C++11<regex>
功能,但不支持 tr1 版本。请注意,区别在于后者的部分(全部?)存在于tr1::
命名空间中,而 C++11<regex>
存在于命名空间std
中。当 C++11 已经发布了一段时间后,倒退并添加对 tr1 的支持没有多大意义。
可以从 GCC 4.9 发行说明中找到以下信息:
“C++ 前端已添加对各种 C++14 添加的支持,在标准 C++ 库方面,最重要的添加是对 C++11 正则表达式的支持”
如果你想安装最新的 GCC4.9 版本自己尝试,你可以点击下面的 SO 链接:
这是使用 gcc4.9 编译并随后运行的示例程序。
//Sample Program
#include <regex>
#include <iostream>
using namespace std;
int main() {
regex reg("[0-9]+");
if (regex_match("123000", reg)) {
cout << "It's a match!" <<endl;
}
return 0;
}
$g++ -std=c++11 foo.cpp -o foo $ g++ -v Using built-in specs. COLLECT_GCC=/home/mantosh/gcc-4.9.0/bin/g++ COLLECT_LTO_WRAPPER=/home/mantosh/gcc-4.9.0/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: /home/mantosh/objdir/../gcc-4.9.0/configure --disable-multilib --prefix=/home/mantosh/gcc-4.9.0 Thread model: posix gcc version 4.9.0 (GCC)
$ ./foo
It's a match!