PHP入門 正規表現関数 正規表現で文字列を検索する(preg_match関数)

正規表現で文字列を検索するには、preg_match関数を使用します。

構文:preg_match関数

preg_match(string $pattern, string $subject
                 [, array &$matches [, int $flags [, int $offset]]]):int|false
$pattern正規表現パターン
$subject検索対象の文字列
&$matches検索結果を格納する配列
$flags動作フラグ
$offset検索の開始位置(既定では文字列の先頭)

preg_match関数による検索結果は、戻り値として返されるのではなく、引数&$matchesに反映されます。この配列には、マッチした文字列の情報が格納されます。

図解
マッチング情報の格納

正規表現パターンの中で、赤枠で囲まれている部分的なパターンをサブマッチパターン、またはキャプチャグループと言います。また、サブマッチパターンにマッチした文字列のことをサブマッチ文字列と言います。preg_match関数では、まずマッチ文字列全体を配列の最初の要素に、その後、サブマッチ文字列を先頭から順番に格納します。

例:基本

<?php
$str='会社の電話番号は0399-99-1123、私のは0388-22-1234です。郵便番号は666-1105です';
if(preg_match('/([0-9]{2,4})-([0-9]{2,4})-([0-9]{4})/',$str,$data)){
  print "電話番号:{$data[0]}<br />";
  print "市外局番:{$data[1]}<br />";
  print "市内局番:{$data[2]}<br />";
  print "加入者番号:{$data[3]}<br />";
}
実行結果
実行結果

preg_match関数の戻り値は、正規表現パターンがマッチした回数を表します。preg_match関数が1(=暗黙的なtrue)を返した場合に、マッチ文字列全体と、それぞれのサブマッチ文字列を出力しています。

preg_match関数は最初の1回しかマッチング処理を行いません。マッチング対象が複数あったとしても、戻り値は1です。つまり、preg_match関数の戻り値は1(マッチ)か、0(マッチしない)、false(エラー)のいずれかであるということです。

例:オフセット値の指定

引数$flagsに定数PREG_OFFSET_CAPTUREを指定することで、マッチ文字列とそれぞれのオフセット値(登場位置)を取得することもできます。また、オフセット値は、バイト数で返されます。

<?php
$str='会社の電話番号は0399-99-1123、私のは0388-22-1234です。郵便番号は666-1105です';
if(preg_match('/([0-9]{2,4})-([0-9]{2,4})-([0-9]{4})/',$str,$data,PREG_OFFSET_CAPTURE)){
  print_r($data);
}
?>
実行結果
実行結果