c++ - 使用 Boost C++ 库将正则表达式替换为自定义替换

标签 c++ boost boost-regex boost-xpressive

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

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

提前致谢!

最佳答案

使用

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

live example

在文档中有关于 regex_replace 函数的所有信息 view Desctiption/Requires

关于c++ - 使用 Boost C++ 库将正则表达式替换为自定义替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831950/

相关文章:

c++ - 如何在指针数组中找到指针的数量

c++ - 破坏二叉搜索树时发生读取访问冲突

c++ - 如何将ostringstream直接写入cout

c++ - Boost..... 有什么大惊小怪的?

c++ - boost 正则表达式匹配

c++ - 用于格式化 MAC 地址字符串的 Boost Regex

c++ - 如何在 boost::regex 中找到子匹配的字符串位置

c++ - 为什么 boost 正则表达式用完了堆栈空间?

c++ - 具有静态变量的非托管静态库的托管 C++ 包装器挂起

c++ - Boost:阻塞直到队列有另一个项目