【发布时间】:2013-06-26 08:35:27
【问题描述】:
首先我要为我的英语道歉。
我在一个小型 C++ 项目中工作,我想保持它的小。 主要问题是我需要使用正则表达式,但它们不能按我需要的方式工作。
这很好用:
std::string s ("subject");
std::regex e ("(sub)(.*)");
if (std::regex_match (s,e))
std::cout << "string object matched\n";
这个也很好用:
std::string s ("0");
std::regex e ("[0-9]", std::regex::extended);
if (std::regex_match (s,e))
std::cout << "string object matched\n";
即使我将 std::regex::extended 更改为 std::regex::awk、基本或其他任何代码都不起作用:
std::string s ("00");
std::regex e ("[0-9]{2}", std::regex::extended);
if (std::regex_match (s,e))
std::cout << "string object matched\n";
我做错了什么吗?
我知道 std::regex 还没有完成,但我认为它们应该以如此简单的正则表达式工作。
无论如何,如果有人能指点我一个小型正则表达式库(请不要提升),我将不胜感激。
其他信息
我正在使用 Linux Ubuntu 12.10,编译器是 gcc > 4.7
编辑:
@jalf:它可以编译,但在最后一个中给了我错误的结果。 它给出了一个错误。 无法显示任何结果,因为我今天在客户中,并且无法访问该程序。
@KennyTM:是的,又是 gcc/libstdc++,我一直在阅读这个论坛来寻找答案。同样,我不能使用 boost。
@Pete Becker:是的,它是 gcc > 4.7 版本。不记得确切的版本了。
【问题讨论】:
-
您在哪个版本中使用哪个实现?这些都是非常新的功能,我相信这些实现有不同的质量。
-
“不起作用”是什么意思?它编译吗?它会给出错误的结果吗?您期望得到哪些结果,实际得到了哪些结果?
-
又是 gcc/libstdc++ 吗?已经有很多关于它的问题。简短回答:使用 Boost,或者切换到 clang/libc++,或者不使用它。
-
您可能正在使用 gcc。所涉及的每个人都应该为在他们的
regex标头中发送废话而感到尴尬。