正規表現関数(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 の設定により動作が変化します。表 234. 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. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- pcre.backtrack_limit integer
-
PCRE のバックトラック処理の制限値です。
- pcre.recursion_limit integer
-
PCRE の再帰処理の制限値です。この値を大きくすると、
使用可能なプロセススタックを使い切ってしまい、
(OS のスタックサイズの制限値に達して) PHP
をクラッシュさせてしまうことに注意しましょう。
リソース型
リソース型は定義されていません。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。表 235. 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 以降で使用可能です。 |
例
例 1608. 有効なパターンの例- /<\/\w+>/
- |(\d{3})-\d+|Sm
- /^(?i)php[34]/
- {^\s+(\s+)?$}
例 1609. 無効なパターンの例
- /href='(.*)' - 終端デリミタが抜けている
- /\w+\s*\w+/J - 未知の修飾子 'J'
- 1-\d3-\d3-\d4| - 始端デリミタが抜けている
目次
- パターン修飾子 — 正規表現パターンに使用可能な修飾子
- パターン構文 — PCRE 正規表現の説明
- preg_grep — パターンにマッチする配列の要素を返す
- preg_last_error — 直近の PCRE 正規表現処理のエラーコードを返す
- preg_match_all — 繰返し正規表現検索を行う
- preg_match — 正規表現によるマッチングを行う
- preg_quote — 正規表現文字をクオートする
- preg_replace_callback — 正規表現検索を行い、コールバック関数を使用して置換を行う
- preg_replace — 正規表現検索および置換を行う
- preg_split — 正規表現で文字列を分割する
正規表現(regex)関数 (POSIX拡張サポート)
導入
ティップ
PHPは、PCRE関数によりPerl互換の構 文を使用する正規表現式もサポートします。これらの関数は、「ものぐさ」 マッチ、言明、条件付きサブパターン、そしてPOSIX拡張正規表現構文 でサポートされていない他の複数の機能をサポートします。警告 |
これらの正規表現関数はバイナリセーフではありません。PCRE関数はバイナリセーフです。
|
正規表現は、複雑な文字列操作の際に使用されます。 PHPはPOSIX 1003.2で定義されたPOSIX拡張正規表現を使用します。 POSIX正規表現に関する詳細については、PHP配布ファイルのregexディレ クトリにある» regexのmanページを参照ください。 このページはmanpageフォーマットであり、読むには man /usr/local/src/regex/regex.7のようにします。
要件
外部ライブラリを必要としません。インストール手順
警告 |
動作に関する知識がある場合以外は、TYPE を変更しないでください。
|
PHP で正規表現のサポートを有効にするには、 --with-regex=TYPE を指定して PHP の configure を行ってください。TYPE は system、apache、php のいずれかで、デフォルトでは php を使用します。
Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。
実行時設定
設定ディレクティブは定義されていません。リソース型
リソース型は定義されていません。定義済み定数
定数は定義されていません。例
例 1751. 正規表現の例
// "abc" が $string のどこかにある場合に true を返す
ereg ("abc", $string);
// "abc" が $string の最初にある場合に true を返す
ereg ("^abc", $string);
// "abc"; が $string の最後にある場合に true を返す
ereg ("abc$", $string);
// クライアントブラウザがNetscape 2, 3またはMSIE 3である場合にtrue を返す
eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);
// 空白で区切られた3つ単語を
// $regs[1], $regs[2],$regs[3]に代入する
ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs);
// <br /> タグを $string の先頭に挿入する
$string = ereg_replace ("^", "<br />", $string);
// <br /> タグを $string の最後に挿入する
$string = ereg_replace ("$", "<br />", $string);
// $string の改行文字を全て取り除く
$string = ereg_replace ("\n", "", $string);
参考
Perl互換の構文を有する正規表現については、 PCRE関数を参照してください。 簡単なシェル形式のワイルドカードパターンマッチングが fnmatch()で提供されています。目次
- ereg_replace — 正規表現による置換
- ereg — 正規表現にマッチさせる
- eregi_replace — 大文字小文字を区別せずに正規表現による置換を行う
- eregi — 大文字小文字を区別せずに正規表現によるマッチングを行う
- split — 正規表現により文字列を分割し、配列に格納する
- spliti — 大文字小文字を区別しない正規表現により文字列を分割し、配列に入れる
- sql_regcase — 大文字小文字を区別しないマッチングのための正規表現を作成する
Weblioに収録されているすべての辞書から正規表現関数を検索する場合は、下記のリンクをクリックしてください。

- 正規表現関数のページへのリンク