我的任务是用 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/