0

这是在 MSVC 上运行良好的代码

std::regex r;
//r = "setdata\\(\\\"([^\\\"]*)\\\",[^\\\"]*\\\"([^\\\"]*)";
r = "setdata\\(";

并且在线验证器也可以很好地解析它(当然在删除 \ 转义时)。

但是对于 g++ 4.6,它会抛出 regex_error。我知道它的正则表达式支持还没有完成,所以我尝试了 <regex.h>:

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 发行版 (c) http://www.haskell.org/haskellwiki/Regex_Posix#regex-posix_Bugs使用的 GNU C 库 (GLIBC) 尤其如此

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

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

4

0 回答 0