正则表达式搜索&用C ++替换group?

时间:2013-06-10 21:42:27

标签: c++ regex

我能想到的最好的是:

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

1 个答案:

答案 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';
}