正規表現パーサ

正規表現はテキスト処理においてよく用いられているパターンマッチングの一形式である。 多くのユーザは正規表現の使い方に精通している。 初期には、 Unix ユーティリティの grep 、 sed 、 awk やプログラミング言語 Perl が正規表現を大いに活用した。 今日、上記の正規表現の使用方法は入手可能な大多数のシステムで統合されている。

パーサを構築しているとき、正規表現の力が利用できれば便利な場合が多い。 正規表現パーサは、 Spirit パーサを構築する為に 正規表現の利用を容易にするために導入された。

正規表現パーサ rxstrlit は単一のテンプレート型パラメータ:イテレータ型を持つ。 初期化時、 rxstrlit は与えられた正規表現を含む Boost Regex オブジェクトを保持する。 rxstrlit は現在の入力ストリームをこの正規表現で一致判定を試みる。 テンプレート型パラメータはデフォルトでは char const*である。 rxstrlit は二つのコンストラクタを持つ。 一つ目はヌル終端文字ポインタを受け取る。 このコンストラクタは引用符で囲まれた正規表現リテラルから rxstrlit を構築するために用いられる。 二つ目のコンストラクタは first / last のイテレータの組を取る。 関数ジェネレータ版は rxstr_p である。

以下にいくつか例を挙げる:

    rxstrlit<>("Hello[[:space:]]+[W|w]orld")
    rxstr_p("Hello[[:space:]]+[W|w]orld")

    std::string msg("Hello[[:space:]]+[W|w]orld");
    rxstrlit<>(msg.begin(), msg.end());

生成されたパーサオブジェクトは文字レベルで動作するので、結局与えられたスキップパーサはその正規表現と一致判定を試みている間は用いられない ( スキャナの働き 参照)。

正規表現パーサは Boost Regex++ ライブラリ の助けを借りて実装されているので、いくつかの制限があることを覚えておかなければならない。

Boost ライブラリが コンピュータにインストールされ、かつ Boost ルートディレクトリが コンパイラの #include<...> 探索パスに加えられていなければならない。 現在のバージョンは Boost ウェブサイトからダウンロードできる。

Boost Regex ライブラリは 双方向イテレータの利用を要求する。 従って、正規表現パーサを含む Spirit パーサを利用する間は、このことを保証しなければならない。

Boost Regex ライブラリは、 Spirit がそうであるような、ヘッダのみのライブラリではない。 しかし一つの翻訳単位のみで利用しているなら、 全てのソースをインクルードできる機能が用意されている。 Boost Regex の全てのソースをこの翻訳単位にインクルードしたければ、 spirit の正規表現パーサヘッダの前にプリプロセッサ定数 BOOST_SPIRIT_NO_REGEX_LIB を定義する。 もし正規表現パーサを二つ以上の翻訳単位で利用したいならこの定数を定義すべきでなく、 関連文書の記述に従って regex ライブラリをアプリケーションにリンクしなければならない。



このドキュメントの対象: Boost Version 1.30.0
最新版ドキュメント(英語)