作成日:2006/05/10
1J 正規表現(初級)
PHPでは様々な正規表現の規格をサポートしており、また、正規表現だけで一冊の本が書けるくらいなので、 この章ではPHPの正規表現の初級程度の説明に止めます。PHPはPerlやRubyと異なりパターンマッチ演算子がありません。 PHPでは正規表現によるパターンマッチや置換は関数で処理します。
- パターンマッチ演算子
- PerlやRubyではパターンマッチ演算子(=~) やその否定形(!~)があり、正規表現は言語仕様の一部です。
1J.1 正規表現の種類
PHPの正規表現は使用する関数により次の3種類に大別されます。
| 関数の種類 | 説明 |
|---|---|
| ereg系 |
ereg系関数は POSIX 1003.2で定義されたPOSIX拡張正規表現 (Extended Reuglar Exression : ERE)に準拠しています。 ereg系関数は、標準モジュールなので常に使用できます。 用例:
ereg("Fred","Fred is Great"); # //は不要
|
| preg系 |
preg系関数では PCRE (Perl-compatible regular expressions) が使用できます。 PCREはPerlに準拠した強力な正規表現です。 Perlの経験者はこちらが使いやすいかもしれません。 用例:
preg_match("/Fred/","Fred is Great"); # Perl同様 // が必要
|
| mb_ereg系 |
mb_ereg系関数にはRubyの正規表現ルーチンが使われています。 PHP5では正規表現のエンジンに鬼車が使われています。Perlとほぼ同等の機能があります。 用例:
mb_ereg("Fred","Fred is Great"); # ereg系同様 // は不要
|
各モジュールで使用できる関数の一覧を以下に挙げます。
| 関数の種類 | 関数 | |
|---|---|---|
| ereg系 | ereg() |
パターンマッチを行い、一致パターンを取り出す(Case Sensitive) ereg()は先頭マッチです。ereg系にはグローバルマッチの機能がありません。 |
eregi() |
パターンマッチを行い、一致パターンを取り出す (Case Insensitive) | |
ereg_replace() |
正規表現による置換(Case Sensitive) ereg_replace() はグローバル置換です。 |
|
eregi_replace() |
正規表現による置換 (Case Insensitive) | |
split() |
デリミタ(正規表現)による文字列分解(Case Sensitive) | |
spliti() |
デリミタ(正規表現)による文字列分解(Case Insensitive) | |
| preg系 | preg_match() |
パターンマッチを行い、一致パターンを取り出す ※ereg()に対応 |
preg_replace() |
正規表現による置換 ※ereg_replace()に対応 preg_replace()はデフォルトでグローバル置換ですが、置換対象の制限は引数でできます。 |
|
preg_split() |
デリミタ(正規表現)による文字列分解 ※split()に対応 | |
preg_match_all() |
グローバルマッチを行い、一致パターンを取り出す ※Perl風g修飾子 | |
preg_replace_callback() |
コールバック関数を使った正規表現による置換 ※Perl風e修飾子 | |
preg_grep() |
配列のパターンマッチを行い、マッチした配列を返す ※Perl風grep() | |
preg_quote() |
正規表現のメタ文字をクォートする | |
| mb_ereg系 | mb_ereg() |
※ereg() に対応 |
mb_eregi() |
※eregi() に対応 | |
mb_ereg_replace() |
※ereg_replace() に対応 | |
mb_eregi_replace() |
※eregi_replace() に対応 | |
mb_split() |
※split() に対応 | |
- preg系関数
- preg系関数では、Perlと同じように i(大文字/小文字を区別しない)などのパターン修飾子が使えます。 但し、グローバルマッチを表す修飾子(g)はありません。グローバルマッチはpreg_match_all()で行います。
- mb_ereg系関数
- mb_ereg系 は php.ini の mbstring.func_overload ディレクティブによってオーバライド可能な関数です。 このディレクティブを有効にすると、例えば、ereg()はmb_ereg()によってオーバライドされます。 mb_ereg系 の関数はこの他にもあります。詳しくはPHPマニュアルを参照して下さい。
