PHP マニュアル
前のページ |  | 次のページ

# CXVIII. 正規表現関数（Perl 互換）

# 導入

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

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

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

> 注意: この拡張モジュールでは、コンパイルした正規表現のために スレッド単位のグローバルキャッシュ (最大 4096) を管理しています。

警告
PCRE には、いくつかの制限があります。詳細は、http://www.pcre.org/pcre.txt を参照してください。

# 要件

外部ライブラリを必要としません。

# インストール手順

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

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

# 実行時設定

`php.ini` の設定により動作が変化します。

表 1. PCRE 設定オプション

名前 | デフォルト | 変更の可否 | 変更履歴
--- | --- | --- | ---
pcre.backtrack_limit | 100000 | PHP_INI_ALL | PHP 5.2.0 以降で使用可能
pcre.recursion_limit | 100000 | PHP_INI_ALL | PHP 5.2.0 以降で使用可能

PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

`pcre.backtrack_limit` integer

  PCRE のバックトラック処理の制限値です。

`pcre.recursion_limit` integer

  PCRE の再帰処理の制限値です。この値を大きくすると、 使用可能なプロセススタックを使い切ってしまい、 (OS のスタックサイズの制限値に達して) PHP をクラッシュさせてしまうことに注意しましょう。

# リソース型

リソース型は定義されていません。

# 定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

表 2. PREG 定数

定数 | 説明
--- | ---
PREG_PATTERN_ORDER | $matches[0] はパターン全体にマッチした文字列の配列、 $matches[1] は第 1 のキャプチャ用サブパターンにマッチした文字列の配列、 といったように結果の順序を指定します。 このフラグは、preg_match_all() でのみ使用されます。
PREG_SET_ORDER | $matches[0] は 1 回目のマッチングでキャプチャした値の配列、 $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() のみで使用されます。
PREG_NO_ERROR | エラーが存在しなかった場合に preg_last_error() から返されます。 PHP 5.2.0 以降で使用可能です。
PREG_INTERNAL_ERROR | PCRE 内部エラーが発生した場合に preg_last_error() から返されます。 PHP 5.2.0 以降で使用可能です。
PREG_BACKTRACK_LIMIT_ERROR | backtrack limit に達した場合に preg_last_error() から返されます。 PHP 5.2.0 以降で使用可能です。
PREG_RECURSION_LIMIT_ERROR | recursion limit に達した場合に preg_last_error() から返されます。 PHP 5.2.0 以降で使用可能です。
PREG_BAD_UTF8_ERROR | 壊れている UTF8 データによって直近のエラーが発生した場合に preg_last_error() から返されます (UTF-8 モード で正規表現を実行した場合のみ)。 PHP 5.2.0 以降で使用可能です。

# 例

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

- `/<\/\w+>/`

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

- `/^(?i)php[34]/`

- `{^\s+(\s+)?$}`

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

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

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

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

前のページ | ホーム | 次のページ
pcntl_wtermsig | 上に戻る | パターン修飾子