XCI. Perl互換の正規表現関数

導入

以下の関数で使用されるパターンに関する構文は、Perl に非常によく似て います。式は、デリミタ、例えばスラッシュ (/) で囲まれる必要があり ます。英数字またはバックスラッシュ(\)以外の全ての文字をデリミタと して使用可能です。デリミタ文字を正規表現本体において使用する必要が ある場合は、バックスラッシュでエスケープする必要があります。PHP 4.0.4以降、パターン指定用に Perl形式の (), {}, [], <> も 使用可能です。 詳細については パターン構文 を参照して下さい。

マッチングに影響を与える様々な修飾子を終端デリミタの後に付ける ことができます。 パターン修飾子 を参照下さい。

PHPは、POSIX拡張正規表現関数を用 いてPOSIX拡張構文を用いる正規表現もサポートしています。

警告

PCREのいくつかの制限についても知っておく必要があります。 詳細は、http://www.pcre.org/pcre.txt を読んで下さい。

要件

正規表現は、Philip Hazelで書かれ、the University of Cambridge, Englandに著作権があるオープンソースソフトウエアのPCREライブラリパッ ケージでサポートされます。PCREは、ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/で取得可能です。

インストール手順

PHP 4.2.0以降、以下の関数はデフォルトで有効となっています。 --without-pcre-regexでPCRE関数を無 効にすることができます。 付属のライブラリを使用しない場合、PCREのインクルードおよびライブラリ ファイルがある場所をDIRに指定するために --with-pcre-regex=DIRを使用して下 さい。これ以前のバージョンでは、この関数を使用する ために--with-pcre-regex[=DIR]を指 定してPHPをconfigureおよびコンパイルする必要があります。

Windows版のPHPには この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

実行用の設定

この拡張モジュールは設定ディレクティブを全く 定義しません。

リソース型

この拡張モジュールはリソース型を全く定義し ません。

定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

表 1. PREG定数

定数説明
PREG_PATTERN_ORDER $matches[0]は、パターンマッチした部分全部を含む配列、 $matches[1]は最初の括弧付きのサブパターンにマッチした文字列の配 列、といったように結果の順序を指定します。 このフラグは、preg_match_all()でのみ使用され ます。
PREG_SET_ORDER $matches[0]は最初の括弧付きのサブパターンにマッチした文字列の 配列、$matches[1]は2番目の括弧付きのサブパターンにマッチした文字 列の配列、といったように結果の順序を指定します。 このフラグは、preg_match_all()でのみ使用され ます。
PREG_OFFSET_CAPTURE PREG_SPLIT_OFFSET_CAPTUREの説明を参照して下 さい。このフラグは、PHP 4.3.0以降で利用可能で す。
PREG_SPLIT_NO_EMPTY このフラグは、preg_split()が空でない部分のみ を返すようにします。
PREG_SPLIT_DELIM_CAPTURE このフラグは、preg_split()が デリミタパターン内の括弧付きの式もキャプチャするようにします。 このフラグは、PHP 4.0.5以降で利用可能です。
PREG_SPLIT_OFFSET_CAPTURE このフラグが設定された場合、マッチする度に付随する文字列オフセッ トも返されます。これは、配列を返す返り値が、各要素がオフセット0 にマッチした文字列、その文字列オフセットがオフセット1に含まれる ような配列に変更されることになるので注意して下さい。 このフラグは、PHP 4.3.0以降で利用可能で、 preg_split()のみで使用されます。

例 1. 有効なパターンの例

  • /<\/\w+>/

  • |(\d{3})-\d+|Sm

  • /^(?i)php[34]/

  • {^\s+(\s+)?$}

例 2. 無効なパターンの例

  • /href='(.*)' - 終端デリミタが抜けている

  • /\w+\s*\w+/J - 未知の修飾子 'J'

  • 1-\d3-\d3-\d4| - 始端デリミタが抜けている

目次
パターン修正子 -- 正規表現パターンで使用可能な修飾子を得る
パターン構文 -- PCRE 正規表現の説明
preg_grep --  パターンにマッチする配列の要素を返す
preg_match_all -- グローバル正規表現検索を行う
preg_match -- 正規表現検索を行う
preg_quote -- 正規表現文字をクオートする
preg_replace_callback --  正規表現検索を行い、コールバック関数を使用して置換を行う
preg_replace -- 正規表現検索および置換を行う
preg_split -- 正規表現で文字列を分割する