patternで指定した正規表現により subjectを検索します。
matchesが指定された場合、検索結果が代入されます。 $matches[0]はパターン全体にマッチしたテキストが代入され、 $matches[1]は最初の括弧付きのサブパターンにマッチしたテキスト が代入され、といったようになります。
flagsには以下のフラグを指定できます。
このフラグが設定された場合、マッチする度に付随する文字列のオフ セットも返されます。これにより、返り値は配列となり、その各要素 はマッチした文字列を要素0、 subjectの中でのその文字列オフセットを要 素1とする配列となることに注意してください。 このフラグは、PHP 4.3.0 以降で利用可能です。
通常、探索は対象文字列の先頭から開始されます。 オプションのパラメータoffsetは、検索の開始を始める 場所として別の位置を指定するために使用けいます。 offsetパラメータは、 PHP 4.3.3以降で使用可能です。
注意: offset は、 substr($subject, $offset) を preg_match_all()の対象文字列の場所に指定するのと 等価ではありません。 これは、pattern には、 ^, $ または (?<=x)のようなアサーションを含めることができる ためです。 以下の比較を行ってみてください。
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>上の例の出力は以下となります:
Array ( )一方、この例では、
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>出力は以下のようになります。
Array ( [0] => Array ( [0] => def [1] => 0 ) )
preg_match()は、pattern がマッチした回数を返します。これは、0回(マッチせず)または1回となり ます。これは、最初にマッチした時点でpreg_match() は検索を止めるためです。逆にpreg_match_all()は、 subjectの終わりまで検索を続けます。 preg_match()は、エラーが発生した場合にFALSEを 返します。
ティップ: Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.
例 3. URLからドメイン名を得る
この例の出力は以下となります。
|
preg_match_all(), preg_replace(), preg_split()も参照ください。