ASCII字符时的意外终结

Unexpected end of regex when ascii character

本文关键字:意外 字符 ASCII      更新时间:2023-10-16

最小可言示例

  #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字符时,我的调试器的错误消息是REGEX的意外结束,但是我只是想匹配上面的文字,但我看不到问题在哪里。

u是Unicode代码点的逃生序列的开始,您需要逃脱。另外,[...]是一个角色集匹配,如果您想从字面上匹配它,则需要逃脱。

std::regex re("\\u_nic400_ib_ext_m_ib_ar_fifo_wr_mux/mux_0_1_out \[0\]");

如果您使用的是C 11或更新,则在编写正则表达式时使用RAW字符串很有帮助,因此您不必加倍反弹。

std::regex re(R"(\u_nic400_ib_ext_m_ib_ar_fifo_wr_mux/mux_0_1_out [0])");

当您将Regexp创建为文字时,这一切都是相关的。如果您在运行时动态构造它,则无需将逃逸量加倍,因为您将字符串直接馈送到Regexp Engine,而是将其解析为C源代码。