我在使用匹配单个竖线字符的小正则表达式时遇到了问题。我总是收到带有 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/