ほぷしぃ

第5回 正規表現

項目

1.パターンマッチング

PHPでは正規表現を用いて、文字列のパターンマッチングを行うことができます。 その際に用いるのがメタ文字です。 メタ文字を用いた文字列操作の得意な言語にはよくPerlが挙げられますが、PHPでもPerlに近い数のメタ文字を扱うことができます。

2.2つの正規表現

PHPで用いることのできる正規表現には、POSIXで定義されているPOSIX拡張正規表現と、Perlで使われている正規表現の二つがあります。

2-1.POSIX拡張正規表現

もともとUNIXで誕生した正規表現を、共通インターフェイス規格であるPOSIXに則って拡張したものです。 用いることのできる主なメタ文字とその意味を、下に挙げます。
メタ文字意味
.任意の一文字と一致
?直前の表現が0〜1回続く
*直前の表現が0回以上続く
+直前の表現が1回以上続く
{n,m}直前の表現がn回以上m回以下続く
(nかmのどちらかを指定しない場合も、カンマは除かない)
|左右の選択肢のどちらかに一致
[]括弧内のどれかに一致(or)
[^]括弧内のどれかに一致しない(nor)
()括弧内をグループ化
^行の頭を表す
$行の末尾を表す

これらのメタ文字を表現のパターン内で用いたい場合は、バックスラッシュ(windows環境下では\マーク)でエスケープする必要があります。
また、文字クラスというパターンを使うことで、より簡素な表現が可能になります。主に[]内で連続したアルファベットや数字 を指定したい場合に、[A-Z]のようにハイフンを用いることでそれが可能になります。ただし、アルファベットの場合は大文字と 小文字が区別されます。

これらの規則を用いてパターンマッチングを行う場合は、ereg()関数を用います。 マッチさせるパターンを第一引数、対象となる変数を第二引数にとります。 また第三引数に配列を指定すると、マッチした部分をその配列に格納します。 ereg()変数はマッチ時の返値としてマッチした数を返します。

<?php
 $sampleword=explode(":","goo:google:yahoo");
 $patterne_1="^g.+$"; //先頭がgで始まる単語のパターン
 $patterne_2="^.+oo$"; //末尾がooで終る単語のパターン
 
 for($x=0;$x<3;$x++){
    if(ereg($patterne_1,$sampleword[$x]))
      echo"$x:$sampleword[$x]<br>";
 }
?>

実行結果:
パターン1に適合する文字列が出力される

また、マッチした部分に対して置換を行うereg_replace()関数もあります。 パターンを第一引数、置換後の文字列を第二引数、対象となる文字列を第三引数に取ります。

2-2.Perl互換の正規表現

Perl互換の正規表現は、POSIX拡張正規表現よりも一般的に動作が速く、また文法も多彩です。Perlの分野に踏み込んでしまうためここ では細かな解説はしません。 こちらの正規表現のパターンを使ってマッチングを行う場合には、PCRE関数を用います。
PHPリファレンスのPCREのページ


前のページへ ページのトップへ 次のページへ