我正在尝试编写一些代码,将“/path/file.extension”之类的字符串更改为另一个指定的扩展名。我正在尝试使用 boost::xpressive 来做到这一点。但是,我遇到了问题。输出中似乎出现了一个垃圾字符:
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
using namespace boost::xpressive;
using namespace std;
int main()
{
std::string str( "xml.xml.xml.xml");
sregex date = sregex::compile( "(\\.*)(\\.xml)$");
std::string format( "\1.zipxml");
std::string str2 = regex_replace( str, date, format );
std::cout << "str = " << str << "\n";
std::cout << "str2 = " << str2 << "\n";
return 0;
}
现在编译并运行它:
[bitdiot@kantpute foodir]$ g++ badregex.cpp
[bitdiot@kantpute foodir]$ ./a.out > output
[bitdiot@kantpute foodir]$ less output
[bitdiot@kantpute foodir]$ cat -vte output
str = xml.xml.xml.xml$
str2 = xml.xml.xml^A.zipxml$
在上面的示例中,我将输出重定向到一个文件,并使用 cat 打印出不可打印的字符。注意 str2 中的 ctrl-A。
无论如何,我是否错误地使用了 boost 库?这是一个提升错误吗?是否有另一个正则表达式可以让我用其他字符串替换“.tail”?(在我的示例中已修复。)
谢谢。