C++ Boost xpressive regex导致垃圾字符
我试图编写一些代码,将“/path/file.extension”之类的字符串更改为另一个指定的扩展名。我正在尝试使用boost::xpressive来实现这一点。但是,我有问题。输出中似乎出现了一个垃圾字符:C++ Boost xpressive regex导致垃圾字符,c++,regex,boost,C++,Regex,Boost,我试图编写一些代码,将“/path/file.extension”之类的字符串更改为另一个指定的扩展名。我正在尝试使用boost::xpressive来实现这一点。但是,我有问题。输出中似乎出现了一个垃圾字符: #include <iostream> #include <boost/xpressive/xpressive.hpp> using namespace boost::xpressive; using namespace std; int main() {
#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;
}
在上面的示例中,我将输出重定向到一个文件,并使用cat打印出不可打印的字符。注意str2中的ctrl-A
不管怎样,我是否使用了boost库?这是一个增强bug吗?是否有另一个正则表达式可以让我用其他字符串替换“.tail”?(在我的示例中,它是固定的。)
谢谢。至少在我读东西的时候,罪魁祸首就在这里:
std::string format(“\1.zipxml”)代码>
您忘了避开反斜杠,因此\1
给您一个控件-a。您几乎肯定想要\\1
或者(如果您的编译器足够新),您可以使用原始字符串来代替,因此它类似于:R”(\1.zipxml)
,并且您不必逃避反斜杠。我可能不会费心提及这一点,除非你在C++字符串中写REs,原始字符串几乎是你最好的朋友(IMO,无论如何)。 < P>至少在我阅读的时候,罪魁祸首就在这里:<代码> STD::字符串格式(“1。.ZIPXML”);<代码>
您忘了避开反斜杠,因此\1
给您一个控件-a。您几乎肯定想要\\1
或者(如果您的编译器足够新),您可以使用原始字符串来代替,因此它类似于:R”(\1.zipxml)
,并且您不必逃避反斜杠。我可能不会费心提及这一点,除非事实上,如果你在C++字符串中写REs,原始字符串几乎是你的新好友(IMO,无论如何)。 < P>正如Jerry Coffin指出的那样。我犯了个愚蠢的错误
错误代码如下所示:
std::string format( "\1.zipxml");
这应替换为:
std::string format( "$1.zipxml");
谢谢大家的帮助。正如杰瑞·科芬向我指出的那样。我犯了个愚蠢的错误
错误代码如下所示:
std::string format( "\1.zipxml");
这应替换为:
std::string format( "$1.zipxml");
谢谢大家的帮助。Hmmm。。。。我试过了,但没用。相反,str2是“xml.xml.xml\1.zipxml”好的,我解决了我的问题,谢谢你的帮助。我用$1代替了\1。你对“jigger”的建议是,我的代码中有一部分是我需要的线索。非常感谢。六羟甲基三聚氰胺六甲醚。。。。我试过了,但没用。相反,str2是“xml.xml.xml\1.zipxml”好的,我解决了我的问题,谢谢你的帮助。我用$1代替了\1。你对“jigger”的建议是,我的代码中有一部分是我需要的线索。非常感谢。