最小可验证示例
#include<regex>
int main(){
std::regex re("\\u_nic400_ib_ext_m_ib_ar_fifo_wr_mux/mux_0_1_out [0]");
}
为什么这会给我一个 regex_error?我的调试器的错误消息是 ascii 字符时正则表达式的意外结束,但我只是试图匹配上面的文字,但我看不出问题出在哪里。
最佳答案
\u
是 Unicode 代码点转义序列的开始,您需要对其进行转义。另外,[...]
是字符集匹配,如果要按字面匹配需要转义。
std::regex re("\\\\u_nic400_ib_ext_m_ib_ar_fifo_wr_mux/mux_0_1_out \\[0\\]");
如果您使用的是 C++11 或更新版本,在编写正则表达式时使用原始字符串会很有帮助,这样您就不必将反斜杠加倍。
std::regex re(R"(\\u_nic400_ib_ext_m_ib_ar_fifo_wr_mux/mux_0_1_out \[0\])");
这仅在您将正则表达式创建为文字时才有意义。如果您在运行时动态构建它,则不需要加倍转义,因为您将字符串直接提供给正则表达式引擎,它不会被解析为 C 源代码。
关于c++ - ascii 字符时正则表达式意外结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57283396/