c++ - std::regex_replace:分离匹配组的访问索引

标签 c++ regex c++11 boost

我的任务是用 std::regex 替换 boost::regex,并遇到了 boost::regex 引用捕获组索引的问题。

正则表达式看起来像这样:

re = "(^Match1$)|(^Match2$)|(^Match3$)|(^Match4$)"

使用替换字符串:

replace_str = "(?{1}M1)(?{2}M2)(?{3}M3)(?{4}M4)"

如果我调用 boost::regex_replace("Match1", re, replace_str, format_all) 我得到“M1”作为结果,使用 std::regex_replace("Match1", re, replace_str) 结果由整个 replace_str 组成。

正则表达式的标准化变体没有 format_all 选项(不确定这是否是问题所在)。 http://en.cppreference.com/w/cpp/regex/match_flag_type

如何使用 c++11/14 正则表达式库重现类似的行为? 我是否错过了允许在不 boost 的情况下使用该行为的选项或语法?

最佳答案

std::regex library不支持 Boost-Extended Format String Syntax由 Boost 正则表达式引擎支持。

如果您正在寻找 Boost 的替代品,您可以考虑切换到支持类似条件替换模式语法的 PCRE2。参见 PCRE2 Extended Replacement String Syntax文章。

关于c++ - std::regex_replace:分离匹配组的访问索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182084/

相关文章:

regex - cmake 如何在 FILE(GLOB) 指令中排除 macos 中的 ._ 文件

regex - sed 使用表达式随机化最后一位数字

c++ - 如何将 std::bind 与 compose2 一起使用?

c++ - 模板类 + 委托(delegate)构造函数 = 字段未初始化? ( clang )

c++ - 带有右值引用参数的模板函数内的 std::is_rvalue_reference

regex - 如何在 Emacs 中创建正则表达式来捕获双方括号之间的文本?

c++ - hpp/cpp split with global function : Multiple definition of . .. 错误

android - opencv C++ 从 android NV21 图像数据缓冲区创建 Mat 对象

c++ - 如何在 Qt/C++ 中存储加密设置?

c++ - 通过加入析构函数来等待异步工作是否安全?