我能想到的最好的是:
#include <boost/algorithm/string/replace.hpp>
#include <boost/regex.hpp>
#include <iostream>
using namespace std;
int main() {
string dog = "scooby-doo";
boost::regex pattern("(\\w+)-doo");
boost::smatch groups;
if (boost::regex_match(dog, groups, pattern))
boost::replace_all(dog, string(groups[1]), "scrappy");
cout << dog << endl;
}
带输出:
scrappy-doo
..是否有更简单的方法,这不涉及做两个不同的搜索?也许使用新的C ++ 11东西(虽然我不确定它是否与gcc atm兼容?)
答案 0 :(得分:2)
std::regex_replace
应该做到这一点。提供的示例非常接近您的问题,甚至可以显示如果您想要如何将答案直接推送到cout
。粘贴在这里为后代:
#include <iostream>
#include <iterator>
#include <regex>
#include <string>
int main()
{
std::string text = "Quick brown fox";
std::regex vowel_re("a|e|i|o|u");
// write the results to an output iterator
std::regex_replace(std::ostreambuf_iterator<char>(std::cout),
text.begin(), text.end(), vowel_re, "*");
// construct a string holding the results
std::cout << '\n' << std::regex_replace(text, vowel_re, "[$&]") << '\n';
}