这是使用MSVC
运行良好的代码std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";
并且在线验证器也可以解析它(当然在删除\ escapes时)。
但是使用g ++ 4.6会抛出regex_error。我知道它的正则表达式支持没有完成所以我试过< regex.h>:
char buf[1024];
regex_t regex;
//int reti = regcomp(®ex, "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)", 0);
int reti = regcomp(®ex, "setdata\\(", 0);
regerror(reti, ®ex, buf, 1024);
它报告“不匹配(或\(”
更新:这是我发现的:
不幸的是,本机平台提供了包含错误和/或违反规范的Posix正则表达式支持。对于Linux发行版使用的GNU C库(GLIBC)尤其如此(c)http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs
这可能是POSIX正则表达式库错误之一吗?
更新:感谢评论,我简化了模式,似乎gcc为转义的\找了一对(这似乎不正确。