1 2 3 4 →

はじめに

 C++の新しい規格「C++0x」では、言語とライブラリの両面から便利な機能が追加されます。「TR1」(Technical Report 1)はC++0xのライブラリ部で、標準C++に新たに追加されるライブラリの多くはBoostの中から選ばれたものです。2008年春にリリースが予定されているVisual Studio 2008にも追加パッケージとして供給されるとの情報を得ています。

 TR1に収録されたクラス/関数の中からいくつかをピックアップし、その概要と使い方を予習しておきましょう。

 BoostのインストールについてはBoostでC++0xのライブラリ「TR1」を先取りしよう (1) をご覧ください。

正規表現について

 さまざまなアプリケーションの実装で必ずと言っていいほど必要となるのが文字列の処理です。簡単なところではファイル、ユーザー入力、あるいはネットワーク越しに手に入れた文字列を空白やカンマで区切るとか、特定の文字列の検索などがあります。

 <string.h>(C++では<cstring>)や標準C++ライブラリのstd::string/wstringには各種の文字列操作関数が用意されていますが、いずれも極めて基本的なものばかりです。文字列中から特定の文字列を検索することはできますが、文字列のパターン照合となると相当面倒なコードを組み上げなくてはなりません。 例えば"07/12/25"のように、数字二桁を'/'で繋いで年月日を表現した文字列をテキストファイル内から抽出するのにはC/C++の標準関数/クラスだけでは骨が折れます。

 一方、PerlやRubyといったスクリプト言語は文字列の処理が得意です。これらスクリプト言語の多くが正規表現をサポートしていることが文字列処理を得意としている大きな理由の1つと言えるでしょう。正規表現は単なる固定文字列ではなくパターンの照合/検索を可能にします。

  TR1に組み入れられる正規表現ライブラリ「Regex」は文字列パターンの照合/検索/置換を行います。そこで用いられる文字列パターンすなわち正規表現(Regular Expression)の構文を以下にまとめておきます。なお、よく使われるものを選んだもので、完全なリストではありません。

  • .:ワイルドカード
  • 任意の一文字。 a.baxbayba3b ... にマッチし、ab はマッチしません。
  • ^$:行頭/行末
  • それぞれ文字列の先頭と末尾を表します。
  • (, ):部分表現(sub-expression)
  • 正規表現中に現れるパターンの部分(グループ)を表します。
  • *+?:繰り返し
  • *は直前の0回以上の繰り返し。 a*bbabaab ...にマッチします。
    +は直前の1回以上の繰り返し。 a+babaab にマッチし b はマッチしません。
    ?は直前の0回もしくは1回の繰り返し。 a?bb または ab にマッチします。
    さらに{}によって繰り返しの回数を指定できます。a{3}aaa にマッチします。 a{2,4}aの2回以上4回以下の繰り返し: aaaaaaaaa にマッチします。 a[2,}a の2回以上の繰り返しを表します。
  • |:選択
  • |の左右いずれか。brue|redblue または red にマッチします。apple|orange|banana のように |を複数用いてもかまいません。
  • [,]:セット
  • []で囲まれた中の文字のいずれか。[abc]abまたはcにマッチします。-で範囲を指定することができます。[a-c]abc に、[a-cA-C] は abcABC にマッチします。
    [の直後に^を置くことで"~以外"となります。[^a-zA-Z] は英文字以外の任意の一文字にマッチします。

 上記の記法を組み合わせてパターンを表現します。例えば す?(もも|うどん) であれば「0または1個のに続いてももまたはうどん」なので ももすももうどんすうどん のいずれかがマッチします。

 正規表現すなわち照合/検索パターンを司るのがクラステンプレート basic_regex<CharT,Traits,Allocator>です。charwchar_tのどちらのパターンを用いるかに応じて2つの短縮名が定義されています。

正規表現クラス
typedef basic_regex<char>      regex;
typedef basic_regex<wchar_t>   wregex;

1 2 3 4
→
INDEX
BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
Page1
はじめに
正規表現について
正規表現-照合:regex_match
正規表現-検索:regex_search、regex_iterator
正規表現-置換:regex_replace
まとめ
プロフィール
επιστημη エピステーメー

C++に首まで浸かったプログラマ。

Microsoft MVP, Visual C++ (2004.01~) だったり
わんくま同盟blog書いてたり
中国茶淹れてにわか茶人を気取ってたり。
 


注目の求人情報
コンサルタント/外資系コンサルティングファーム
ITコンサルティング (設計・開発・導入、そして業務およびシステムの運用までのコンサルティング)...
システムエンジニア/証券・金融向け企業
・証券関連システムの企画、要件定義、システム設計  ・協力会社管理
コンサルタント/IT戦略コンサルティングファーム
経営情報活用支援、業務改革推進支援、IT 活用の企画および導入支援、新規事業立上げ支援等。...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: