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);
}
?>