Я могу использовать Xpressive библиотеки Boost, чтобы выполнить некоторые регулярные замены, например:
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
void replace(){
std::string in("a(bc) de(fg)");
sregex re = +_w >> '(' >> (s1= +_w) >> ')';
std::string out = regex_replace(in,re,"$1");
std::cout << out << std::endl;
}
Что мне нужно, это заменить захваченную часть результатом определенной функции преобразования, например, например,
std::string modifyString(std::string &in){
std::string out(in);
std::reverse(out.begin(),out.end());
return out;
}
поэтому результат приведенного выше примера будет cb gf.
Как вы думаете, что будет лучшим подходом для реализации этого?
Заранее спасибо!
использование
std::string modifyString(const smatch& match){
std::string out(match[1]);
std::reverse(out.begin(),out.end());
return out;
}
void replace(){
std::string in("a(bc) de(fg)");
sregex re = +_w >> '(' >> (s1= +_w) >> ')';
std::string out = regex_replace(in, re, modifyString);
std::cout << out << std::endl;
}
В документации есть все о regex_replace
функция посмотреть описание / требуется
Передайте функцию форматирования в regex_replace
, Обратите внимание, что нужно принять const smatch &
,
std::string modifyString(smatch const &what){
std::string out(what[1].str());
std::reverse(out.begin(),out.end());
return out;
}
std::string out = regex_replace(in,re,modifyString);