boost :: regex搜索和替换

时间:2017-09-09 02:43:00

标签: c++ regex boost boost-regex

我正在编写一个用boost::regex进行字符串操作的程序。 在所有情况下,我都需要regex_search的功能,但只有特定情况需要regex_replace。 有没有办法将两者结合起来,以便替换不会重做搜索的工作?

我知道在打电话之后

boost::regex re;
std::string str, fmt;
// . . .
boost::smatch match;
regex_search( str, match, re );

match包含有关匹配的信息,但

match.format( fmt );

不做什么

regex_replace( str, re, fmt );

确实

1 个答案:

答案 0 :(得分:1)

也许使用动态替换:C++ boost regex replace with conditions

  

那里有一个c ++ 03,c ++ 11变体,带有命名/未命名的子匹配。

#include <boost/regex.hpp>
#include <iostream>

int main() {
    std::string pattern = "dddd, mmmm d, yyyy";
    pattern = boost::regex_replace(pattern, boost::regex("(dddd)|(d)|(mmmm)|(yyyy)"), [](auto& match)->std::string{
        if (match.str() == "dddd")
            return "Tuesday";

        if (match.str() == "d")
            return "26";

        if (match.str() == "mmmm")
            return "December";

        if (match.str() == "yyyy")
            return "2016";

        return "";
    });

    std::cout << "Result: " << pattern << "\n";
}