这个正则表达式有什么问题? MSVC <regex>接受,但gcc <regex>和<regex.h>拒绝</regex.h> </regex> </regex>

时间:2013-08-02 10:25:24

标签: regex visual-c++ gcc g++

这是使用MSVC

运行良好的代码
std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";

并且在线验证器也可以解析它(当然在删除\ escapes时)。

但是使用g ++ 4.6会抛出regex_error。我知道它的正则表达式支持没有完成所以我试过&lt; regex.h&gt;:

char buf[1024];
regex_t regex;
//int reti = regcomp(&regex, "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)", 0);
int reti = regcomp(&regex, "setdata\\(", 0);
regerror(reti, &regex, buf, 1024);

它报告“不匹配(或\(”

更新:这是我发现的:

不幸的是,本机平台提供了包含错误和/或违反规范的Posix正则表达式支持。对于Linux发行版使用的GNU C库(GLIBC)尤其如此(c)http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs

这可能是POSIX正则表达式库错误之一吗?

更新:感谢评论,我简化了模式,似乎gcc为转义的\找了一对(这似乎不正确。

0 个答案:

没有答案