C++ std::regex 文字管道错误转义异常

标签 c++ regex

我在使用匹配单个竖线字符的小正则表达式时遇到了问题。我总是收到带有 error_escape 代码的 regex_error 异常。

在最基本的形式中,管道上的转义符在 posix、扩展 posix 或默认语法模式下不起作用

std::regex("\\|", std::regex_constants::extended);

我已经尝试了所有 3 种带有 2 个反斜杠的模式,只有一个和没有。

我什至尝试使用转义符来匹配管道字符的实际值:

\\0x7c or \0x7c

同样的结果。

我做错了什么?我的代码中的所有其他正则表达式都有效,包括几个类似的文字字符转义(+、* 等)。

(请不要建议boost)

最佳答案

支持 std::regex 的 GNU libstdc++ 最早版本是 v4.9.0,因此如果您使用的是 libstdc++ v4.8,您会发现正则表达式实现中有很多错误。不幸的是,它是在部分实现且通常无法使用的情况下发布的,但现在这是桥下的水。

(作为记录,这里是 v4.8.3 文档中的 implementation status。尽管该文档“此页面描述了主线 GCC SVN 中的 C++ 支持,而不是在任何特定版本中”,据我所知,它是当时可用内容的实际记录;但是,唯一的提示是在 URL 本身中。release notes for v4.9 列表 std::regex 是新添加的。 )

很抱歉,我不使用 MinGW,我也不打算使用,所以我没有资格说是否有可行的解决方法。显然,std::regex 在 Windows C++ 标准库实现中运行良好(我从未使用过的其他东西)。而且,当然,总是有提升,但这似乎超出了这个问题的范围:)

关于C++ std::regex 文字管道错误转义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049648/

相关文章:

C++ - 模板嵌套类的引用初始化无效

c++ - 如何在向导页面中注册 QListView 中的所有选定条目?

regex - 使用 like 与 Excel 中的字符串进行比较

python - 将字符串转换为带有内部逗号的字符串字典

C++ 编译错误非类类型

c++ - 重载运算符==

c++ - C++ 中的后缀计算仅在某些时候产生正确答案

mysql - 在 MySQL 中的字符串末尾选择双字母与单字母

java - URL 中有效图像的正则表达式

javascript - 无法用反斜杠替换正斜杠,反之亦然