std :: regex_replace:访问析取匹配组的索引

时间:2017-04-03 10:21:57

标签: 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正则表达式库重现类似的行为? 我是否错过了允许在没有提升的情况下使用该行为的选项或语法?

1 个答案:

答案 0 :(得分:1)

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

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