1

我可以使用 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

您认为实现这一点的最佳方法是什么?

提前致谢!

4

2 回答 2

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功能视图的描述/要求

于 2013-04-05T10:59:08.953 回答
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);

请参阅http://www.boost.org/doc/libs/1_53_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.string_substitutions

于 2013-04-05T11:00:11.710 回答