c++ - ascii 字符时正则表达式意外结束

标签 c++ regex

最小可验证示例

  #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/

相关文章:

c++ - 使用std::allocator在constexpr中进行默认初始化

c++ - 在汇编中查找 Main

php - 用于匹配字符串中单引号单词并忽略转义单引号的正则表达式模式

java - 正则表达式精确匹配字符串?

html - 替换除链接之外的所有文本

c++ - 尝试制作类模板时未命名类型错误

c++ - 如何使用 C/C++ 获取数字锁定状态?

c++ - 为什么某些 C++ 标准库 `operator<<` 函数将其流宽度重置为 0?

c# - 去除url中的重复词并过滤掉不在列表中的词

c++ - boost regex_match 与 regex_search