Perl互換正規表現
Perlの正規表現とほぼ同等の正規表現の利用
PHPでは、Perl(スクリプト言語として良く知られています) の正規表現とほぼ同等の正規表現を利用することができます。 この正規表現を、Perl互換正規表現と呼びます。 Perl独自の拡張があるぶん高機能となっています。 Perl互換正規表現を利用した関数は、関数名が preg_ で始まります。
正規表現を利用した検索
正規表現を利用した検索には、preg_matchを利用します。 引数は、検索パターン、検索対象とする文字列、の順になります。 なお、検索パターンは、「/」で囲むのが慣例になっています。 検索パターンにマッチした場合はtrueを返し、 マッチしなかった場合はfalse を返します。
$yuubin = "/[0-9]{3}-[0-9]{4}/"; $address = "650-0033 神戸市中央区江戸町95 井門神戸ビル 1F シティバンク神戸支 店"; preg_match($yuubin,$address);
もちろん、これだけではありません。 第三の引数(オプション引数)に変数を指定すると、 マッチした文字列が、 パターン全体にマッチした文字列、サブパターンにマッチした文字列、 の順に配列として格納されます。
$yuubin = "/([0-9]{3})-([0-9]{4})/"; $address = "650-0033 神戸市中央区江戸町95 井門神戸ビル 1F シティバンク神戸支 店"; preg_match($yuubin,$address,$result); print_r($result);
上のスクリプトを実行した結果は、
Array ( [0] => 650-0033 [1] => 650 [2] => 0033 )
のようになります。配列の先頭はパターン全体になり、 後はサブパターン(検索するパターンで括弧()で括った部分) にマッチした文字列が順に格納されています。
パターンの数を数えるには、preg_match_all を利用します。 引数は、検索パターン、検索対象とする文字列、検索結果の順になります。 この関数は、検索パターンにマッチした個数を返します。
$yuubin = "/[0-9]{3,4}/"; $address = "650-0033 神戸市中央区江戸町95 井門神戸ビル 1F シティバンク神戸支 店"; preg_match_all($yuubin,$address,$result); print_r($result);
上のスクリプトを実行した結果は、
Array ( [0] => Array ( [0] => 650 [1] => 0033 ) )
のようになります。 パターンにマッチした文字列が順に格納されています。
Perl互換正規表現は、検索結果の格納方法を選択できます。 通常は上の例のように、パターンにマッチした文字列、サブパターン、となりますが、 preg_matchの第4引数として、 PREG_OFFSET_CAPTUREを選ぶと、マッチした文字列の場所も格納します。 このため、結果は多次元配列になります。
正規表現を利用した置換
正規表現を利用した置換には、preg_replace を利用します。 引数は、検索パターン、置換文字(列)、置換を行う文字列、 置換回数(オプション)の順になります。 この関数は、置換を行った結果を返します。 例えば、下のように利用します。
$replacedtext = preg_replace("/(<br>)+/","$1",$text); print($replacedtext);
この例では、改行(<br>)が複数出てきた場合、 1つだけにします。 $1は(一般には「ドルマーク+数字」)、 正規表現のサブパターン(括弧で括られた部分)を順に参照します。 数字が0ではなく1からはじまることに注意しましょう。
検索パターン、置換文字列には、配列を利用することができます。 検索パターンにマッチした文字列は、 置換文字列の配列の対応する要素に置換されます。 (要素数が異なる場合などで対応する要素が無い場合は、 空に置換されます)
$eigo = array(Sun,Mon,Tue,Wed,Thu,Fri,Sat); $nihongo = array(日,月,火,水,木,金,土); $replacedtext = preg_replace($eigo,$nihongo,$text); print($replacedtext);Copyright (C) 2003-2018. PHP で WEB 作成 All rights reserved.