替换匹配正则表达式的标记

时间:2016-03-24 12:04:50

标签: c++ regex c++11 boost boost-regex

我想使用正则表达式作为搜索模式和模板来构造字符串。 (我正在使用boost :: regex因为我在gcc 4.8.4上显然没有完全支持regex(直到4.9)):

也就是说,我想构造一个正则表达式,将它传递给一个函数,使用正则表达式匹配一些文件,然后按照相同的模式构造一个输出文件名。例如:

正则表达式:“file _。* \ .txt” 匹配“file_1.txt”,“file_2.txt”等内容。 然后想从中构建 输出:“file_all.txt”

也就是说,我希望匹配以“file_”开头并以“.txt”结尾的文件,然后我想填写“file_”和“.txt”之间的“all”,所有这些都来自一个正则表达式对象

我们将跳过与正则表达式的匹配,因为这很简单,而是专注于替换:

#include <iostream>
#include <iterator>
#include <string>

#include <boost/regex.hpp>

std::string constructOutput(const boost::regex& myRegex)
{
    // How to replace the match to the center of the filenames here?
    // return boost::regex_replace(?, myRegex, "all");
}

int main()
{
   // We can do something like this, but it requires us to manually separate the "center" of the regex from the string, as well as keep around a string object and a regex object:
//   std::string myText = "File_.*.txt";
//   boost::regex myRegex("_.*\\.");

//   std::cout << '\n' << boost::regex_replace(myText, myRegex, "_all.") << '\n';

    // Want to do this:
    boost::regex myRegex("File_.*\\.txt");
    std::string outputString = constructOutput(myRegex);
    std::cout << outputString << std::endl;
}

这样的事情可能吗?

0 个答案:

没有答案