/ / C ++、ブースト正規表現、一致した値の値関数を置き換えますか? -C ++、正規表現、ブースト正規表現

C + +は、正規表現をブースト、一致した値の値の機能を置き換えますか? - c ++、regex、boost-regex

具体的には、valという文字列の配列があり、のすべてのインスタンスを置き換えたい "%{n}%" 入力で val[n]。より一般的には、置換値を一致値の関数にする必要があります。これはC ++であるため、Boostを使用しましたが、別の一般的な正規表現ライブラリがニーズに合っている場合は、お知らせください。

いくつかの.NET(C#、VB.NET)ソリューションを見つけましたが、ここで同じアプローチを使用できるかどうか(または、できる場合はその方法)がわかりません。

私はこのい解決策があることを知っています:フォームの表現を持っています "(%{0}%)|(%{1}%)..." そして、次のような置換パターンを持っています "(1?" + val[0] + ")(2?" + val[1] ... + ")".

しかし、私がやろうとしていることをもっとエレガントにできるかどうかを知りたい。

ありがとう!

回答:

回答№1は1

ブーストを信じない::正規表現にはこれを簡単に行う方法があります。私が考えることができる最も簡単な方法は、「(%{[0-9] +}%)」パターンを使用してregex_searchを実行し、返されたmatch_resultsオブジェクトのサブマッチを反復処理することです。各一致(match_results :: positionメソッドがここでは友達になります)の間のテキストを連結して、サブ一致をval配列の値に変換することにより、新しい文字列を作成する必要があります。