1

我能想到的最好的是:

#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 兼容?)

4

1 回答 1

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';
}
于 2013-06-10T21:48:39.337 回答