int preg_match_all
(string pattern, string subject, array matches, int [order]);subject において pattern で指定した正規表現にマッチする かどうかを検索し、order で指定した 順番で matches に結果を代入します。
最初にマッチするものが見つかった後、最後にマッチしたパターンの後から 検索が続行されます。
order は、次の2つのどちらかとなります。
$matches[0] がパターン全体にマッチする配列であり、 $matches[1] が最初の括弧で括られたサブパターンにマッチする 文字列の配列であり、といった順番となります。
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>a test</div>", $out, PREG_PATTERN_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"
<b>example: </b>, <div align=left>this is a test</div> example: , this is a test
$matches[0] は最初にマッチした組の配列であり、 $matches[1] は二番目にマッチした組の配列であり、 といった順序となります。
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>a test</div>", $out, PREG_SET_ORDER); print $out[0][0].", ".$out[0][1]."\n"; print $out[1][0].", ".$out[1][1]."\n"
<b>example: </b>, example: <div align=left>this is a test</div>, this is a test
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);
preg_match, preg_replace, preg_split も参照下さい。