我正在编写一个用boost::regex
进行字符串操作的程序。
在所有情况下,我都需要regex_search
的功能,但只有特定情况需要regex_replace
。
有没有办法将两者结合起来,以便替换不会重做搜索的工作?
我知道在打电话之后
boost::regex re;
std::string str, fmt;
// . . .
boost::smatch match;
regex_search( str, match, re );
match
包含有关匹配的信息,但
match.format( fmt );
不做什么
regex_replace( str, re, fmt );
确实
答案 0 :(得分:1)
也许使用动态替换:C++ boost regex replace with conditions
那里有一个c ++ 03,c ++ 11变体,带有命名/未命名的子匹配。
#include <boost/regex.hpp>
#include <iostream>
int main() {
std::string pattern = "dddd, mmmm d, yyyy";
pattern = boost::regex_replace(pattern, boost::regex("(dddd)|(d)|(mmmm)|(yyyy)"), [](auto& match)->std::string{
if (match.str() == "dddd")
return "Tuesday";
if (match.str() == "d")
return "26";
if (match.str() == "mmmm")
return "December";
if (match.str() == "yyyy")
return "2016";
return "";
});
std::cout << "Result: " << pattern << "\n";
}