SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

BoostでC++0xのライブラリ「TR1」を先取りしよう

BoostでC++0xのライブラリ「TR1」を先取りしよう (2)

正規表現「regex」

正規表現-置換:regex_replace

 正規表現にマッチした部分を指定した書式で置き換えます。

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;
}
実行結果
すもももももももものうち

 さらに、正規表現中の部分マッチを個別に置き換えることもできます。

regex_replace (部分置換)
/* #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++人気を再燃してくれることを期待しています。

 ── このシリーズ、も少し続く予定。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
BoostでC++0xのライブラリ「TR1」を先取りしよう連載記事一覧

もっと読む

この記事の著者

επιστημη(エピステーメー)

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1967 2008/01/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー