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/

相关文章:

正则表达式:两次比赛之间的否定超前

c++ - 使用 extern 的显式实例化声明

c++ - for循环的每次迭代都添加一个新语句。二维数组排队

java - Java 中用于验证用户名的正则表达式

c++ - 可变参数模板分隔符

regex - 如何使用自定义分隔符删除模式之间的行

c++ - boost::regex vs std::regex - 找不到 empty() 方法?

c++ - 为什么 lock_guard 可以通过 unique_lock 得到一个已经锁定的互斥体? - 还有问题

c++ - 嵌套命名空间,纠正静态库设计问题

c++ - 如何在 C++ 中使用对象序列化保存和加载 std::string?