PHPでパターンにマッチした文字列をすべて取り出す
preg_match_all
PREG_PATTERN_ORDER
preg_match_all("|<[^>]+>(.*?)<[^>]+>|", "<b>abc</b><span>xyz</span>", $out, PREG_PATTERN_ORDER);
echo '$out[0][0] = '.$out[0][0]."\n";
echo '$out[0][1] = '.$out[0][1]."\n";
echo '$out[1][0] = '.$out[1][0]."\n";
echo '$out[1][1] = '.$out[1][1]."\n";
結果
- $out[0][0] = <b>abc</b>
- $out[0][1] = <span>xyz</span>
- $out[1][0] = abc
- $out[1][1] = xyz
$out[0][i]にはパターンにマッチしたi番目の文字列が入る。
$out[j][i]にi番目にマッチした中でパターンにあるカッコのj番目にマッチした文字列が入る。
PREG_SET_ORDER
preg_match_all("|<[^>]+>(.*?)<[^>]+>|", "<b>abc</b><span>xyz</span>", $out, PREG_SET_ORDER);
echo '$out[0][0] = '.$out[0][0]."\n";
echo '$out[0][1] = '.$out[0][1]."\n";
echo '$out[1][0] = '.$out[1][0]."\n";
echo '$out[1][1] = '.$out[1][1]."\n";
結果
- $out[0][0] = <b>abc</b>
- $out[0][1] = abc
- $out[1][0] = <span>xyz</span>
- $out[1][1] = xyz
$out[i][0]にはパターンにマッチしたi番目の文字列が入る。
$out[i][j]にi番目にマッチした中でパターンにあるカッコのj番目にマッチした文字列が入る。
PREG_PATTERN_ORDER と PREG_SET_ORDER とでは、配列$outのキーの順序が入れ替わった感じ。
2012/07/13 11:02