PHP preg_match_all() 関数

PHP 正規表現(PCRE)

preg_match_all 関数は、グローバルな正規表現マッチングを実行するために使用されます。

構文

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

subject 内で pattern で指定された正規表現に一致するすべての結果を検索し、それらを flag で指定された順序で matches に出力します。

最初のマッチが見つかった後、それ以降の検索は最後のマッチ位置から続行されます。

パラメータの説明:

  • $pattern: 検索するパターン。文字列形式。

  • $subject: 入力文字列

  • $matches: 多次元配列。出力パラメータとしてすべてのマッチ結果を出力します。配列の並び順は flags で指定されます。

  • $flags: 以下のフラグと組み合わせて使用できます(PREG_PATTERN_ORDER と PREG_SET_ORDER は同時に使用できないことに注意):

    1. PREG_PATTERN_ORDER: 結果の並び順は、$matches

    2. PREG_SET_ORDER: 結果の並び順は、$matches

    3. PREG_OFFSET_CAPTURE: このフラグが渡されると、見つかった各マッチは、対象文字列に対する相対的なオフセットを追加して返されます。

  • offset: 通常、検索は対象文字列の先頭位置から始まります。オプションのパラメータ offset は、対象文字列の指定位置から検索を開始するために使用されます(単位はバイト)。

戻り値

完全なマッチの回数(0の場合もあります)を返します。エラーが発生した場合は FALSE を返します。

例

<b> と </b> タグの内容を検索して一致させる:

<?php $userinfo = "Name: <b>PHP</b> <br> Title: <b>Programming Language</b>"; preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array); print_r($pat_array[0]); ?>

実行結果は以下のようになります:

Array
(
    [0] => <b>PHP</b>
    [1] => <b>Programming Language</b>
)

一致するHTMLタグを検索(貪欲):

<?php //\\2 は後方参照の例です。これは PCRE に、正規表現内の2番目の丸括弧(ここでは ([\w]+) )と一致しなければならないことを伝えます。 //マッチした結果です。ここではダブルクォートを使用しているため、2つのバックスラッシュを使用しています。 $html = "<b>bold text</b><a href=howdy.html>click me</a>"; preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); foreach ($matches as $val) { echo "matched: " . $val[0] . "\n"; echo "part 1: " . $val[1] . "\n"; echo "part 2: " . $val[2] . "\n"; echo "part 3: " . $val[3] . "\n"; echo "part 4: " . $val[4] . "\n\n"; } ?>

実行結果は以下のようになります:

matched: <b>bold text</b>
part 1: <b>
part 2: b
part 3: bold text
part 4: </b>

matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: a
part 3: click me
part 4: </a>

PHP 正規表現(PCRE)

他の拡張