我可以使用Boost库的Xpressive来做一些像这样的正则表达式替换:
#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 。
您认为实现这一目标的最佳方法是什么?
提前致谢!
答案 0 :(得分:2)
使用
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
函数view Desctiption/Requires
答案 1 :(得分:2)
将格式化程序功能传递给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);