PHP preg_match_all() 関数
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 は同時に使用できないことに注意):
PREG_PATTERN_ORDER: 結果の並び順は、$matches
PREG_SET_ORDER: 結果の並び順は、$matches
PREG_OFFSET_CAPTURE: このフラグが渡されると、見つかった各マッチは、対象文字列に対する相対的なオフセットを追加して返されます。
offset: 通常、検索は対象文字列の先頭位置から始まります。オプションのパラメータ offset は、対象文字列の指定位置から検索を開始するために使用されます(単位はバイト)。
戻り値
完全なマッチの回数(0の場合もあります)を返します。エラーが発生した場合は FALSE を返します。
例
<b> と </b> タグの内容を検索して一致させる:
$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タグを検索(貪欲):
//\\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>他の拡張