NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"> preg_match_all (PHP 3>= 3.0.9, PHP 4 )
preg_match_all -- グローバル正規表現検索を行う
説明 int
preg_match_all ( string pattern, string subject, array matches, int
[order] )
subject において
pattern で指定した正規表現にマッチする
かどうかを検索し、order で指定した
順番で matches に結果を代入します。
最初にマッチするものが見つかった後、最後にマッチしたパターンの後から
検索が続行されます。
order は、次の2つのどちらかとなります。
PREG_PATTERN_ORDER
$matches[0] がパターン全体にマッチする配列であり、
$matches[1] が最初の括弧で括られたサブパターンにマッチする
文字列の配列であり、といった順番となります。
この例の出力は以下のようになります。
$out[0]は、パターン全体にマッチする文字列の配列を有しており、
$out[1]は、タグで囲まれた文字列の配列を有しています。
PREG_SET_ORDER
$matches[0]は最初にマッチした組の配列であり、
$matches[1]は二番目にマッチした組の配列であり、
といった順序となります。
この例の出力は以下のようになります。
この場合、$matches[0] は最初にマッチした組であり、
$matches[0][0] はパターン全体にマッチしたテキスト、
$matches[0][1] は最初のサブパターンにマッチしたテキスト、
といったようになります。
同様に、$matches[1]は二番目にマッチした組といったようになり
ます。
order が指定されない場合、PREG_PATTERN_ORDER
を仮定します。
パターンがマッチした総数を返します。または、マッチしなかったか、
エラーが発生した場合にFALSE を返します。
例 1テキストから全ての電話番号を得る
preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
"Call 555-1212 or 1-800-555-1212", $phones);
例 2HTMLタグにマッチするものを見付ける(greedy)
// \\2 は後方参照の例です。これは、pcre に正規表現自体の括弧の2番目の
// 組、つまりこの場合は([\w]+)、にマッチします。文字列が二重引用符で括
// られているため、バックスラッシュの追加が必要です。
$html = "<b>bold text</b><a href=howdy.html>click me</a>";
preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."\n";
echo "part 1: ".$matches[1][$i]."\n";
echo "part 2: ".$matches[3][$i]."\n";
echo "part 3: ".$matches[4][$i]."\n\n";
}
この例の出力は以下となります。
matched: <b>bold text</b>
part 1: <b>
part 2: bold text
part 3: </b>
matched: <a href=howdy.html>click me</a>
part 1: <a href=howdy.html>
part 2: click me
part 3: </a>
preg_match() ,
preg_replace() ,
preg_split() も参照下さい。