3

perlでは、私はこれを行うことができます

if($str =~ s/a/b/) {
  do something
}

C ++では、検索/置換部分の実行方法を知っています:

str = boost::regex_replace(str, boost::regex("a"), "b",  
                           boost::match_default | boost::format_perl ) ;

交換が行われたかどうかはどうすればわかりますか?

古い値と新しい値を比較できました。より良い方法はありますか?

4

1 に答える 1

1

これを行うためのより良い方法があるかもしれませんが、ドキュメントにはそのためのヒントがありません。この関数は、入力をフォーマットしたり、出力にコピーしたりしているようです。したがって、簡単な解決策は次のようになります。

std::string result = boost::regex_replace(str, boost::regex("a"), "b",
                                          boost::match_default | boost::format_perl);
if (result != str) {
    // Do something with "result".
}

ただし、非常に効率的な実装が必要だと思われる場合は、それを使用regex_match()して、一致したものを正確に示してから、サブ文字列を自分で置き換えることができます。

于 2012-06-28T20:52:29.947 に答える