这是在 MSVC 上运行良好的代码
std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";
并且在线验证器也可以很好地解析它(当然在删除 \ 转义时)。
但是对于 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 发行版 (c) http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs使用的 GNU C 库 (GLIBC) 尤其如此
这可能是那些 POSIX 正则表达式库错误之一吗?
更新:感谢评论,我简化了模式,似乎 gcc 为转义的 \( 寻找一对似乎不正确。