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 );

делает.


person SU3    schedule 09.09.2017    source источник
comment
Не могли бы вы объяснить, почему вы подумали, что это плохой вопрос?   -  person SU3    schedule 09.09.2017


Ответы (1)


Возможно, используйте динамическую замену: регулярное выражение C++ boost заменить условиями

В образце есть варианты С++ 03, С++ 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";
}
person sehe    schedule 09.09.2017