正規表現-置換:regex_replace
正規表現にマッチした部分を指定した書式で置き換えます。
/* #include は省略 */ using namespace std; int main() { wcout.imbue(locale("japanese")); // "うどん"を"もも"に置き換える wstring source = L"すうどんもうどんもうどんのうち"; tr1::wregex re(L"うどん"); wstring fmt = L"もも"; wstring result = tr1::regex_replace(source, re, fmt); wcout << result << endl; }
すもももももももものうち
さらに、正規表現中の部分マッチを個別に置き換えることもできます。
/* #include は省略 */ using namespace std; int main() { wcout.imbue(locale("japanese")); wstring source = L"高島屋ああ果物屋千疋屋"; tr1::wregex re(L"(..)(屋)"); wstring fmt = L"(?1松島)(?2や)"; // 部分マッチをそれぞれ // "松島","や"に置換 wstring result = tr1::regex_replace(source, re, fmt, boost::match_default | boost::format_all); wcout << result << endl; }
松島やああ松島や松島や
まとめ
いかがでしょうか。正規表現はその公式なサポートが長らく待たれていた機能です。TR1が最近ちょっと陰りの見えてきたC++人気を再燃してくれることを期待しています。
── このシリーズ、も少し続く予定。
