在Boost Regex中转义反斜杠时触发异常问题排查
关于Boost正则表达式中反斜杠转义的错误分析与解决
你的写法确实存在错误,先看你给出的代码:
boost::regex shaderRegex{ "test\\" };
触发的异常信息:
未处理的异常位于 0x00007FFD13034FD9 (project.exe):Microsoft C++ 异常: boost::wrapexceptboost::regex_error,位于内存位置。
错误原因
问题出在双重转义的规则冲突:
- C++字符串里,反斜杠
\是特殊转义字符,所以"\\"编译后实际只会向Boost正则引擎传递单个反斜杠。 - 但Boost正则的语法中,单个反斜杠也是转义标记,必须跟其他字符组成合法转义序列(比如
\d匹配数字、\t匹配制表符),单独的\属于不完整的语法,直接触发正则语法错误。
正确写法
有两种可靠的解决方式:
- 方案一:使用C原始字符串字面量(C11及以上支持)
原始字符串会忽略字符串层面的转义规则,直接把内容原样传给正则引擎,所以只需要写两个反斜杠表示字面意义的一个反斜杠:boost::regex shaderRegex{ R"(test\\)" }; - 方案二:普通字符串的双重转义
在普通字符串里写四个反斜杠,编译后会转换成两个反斜杠传递给正则引擎,正则引擎再解析为一个字面反斜杠:boost::regex shaderRegex{ "test\\\\" };
内容的提问来源于stack exchange,提问作者user13310405
相关产品推荐
相关产品推荐

