2013-04-05 37 views
1

我可以用xpressive中Boost庫的做一些正則表達式替換這樣的:使用Boost C++庫做一個正則表達式用自定義更換更換

#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

您認爲最好的方法是什麼?

在此先感謝!

回答

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

live example

在文檔有所有關於regex_replace功能view Desctiption/Requires