「/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 に注目してください。
とにかく、ブーストライブラリを間違って使用していますか? これはブーストバグですか?「.tail」を他の文字列に置き換えることができる、使用できる別の正規表現はありますか? (私の例では修正されています。)
ありがとう。