我想使用正则表达式作为搜索模式和模板来构造字符串。 (我正在使用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;
}
这样的事情可能吗?