php(単純な数値マッチング)を使用してhtml文字列を解析したいと思います。
<i>1002</i><i>999</i><i>344</i><i>663</i>
結果を配列として表示したい。例:[1002,999,344,633,...]
私はこのように試しました:
<?php
$html="<i>1002</i><i>999</i><i>344</i><i>663</i>";
if(preg_match_all("/<i>[0-9]*<\/i>/",$html, $matches,PREG_SET_ORDER))
foreach($matches as $match) {
echo strip_tags($match[0])."<br/>";
}
?>
そして私は私が望む正確な出力を得ました。
1002
999
344
663
しかし、正規表現に小さな変更を加えて同じコードを試してみると、異なる答えが得られます。
このような:
<?php
$html="<i>1002</i><i>999</i><i>344</i><i>663</i>";
if(preg_match_all("/<i>.*<\/i>/",$html, $matches,PREG_SET_ORDER))
foreach($matches as $match) {
echo strip_tags($match[0])."<br/>";
}
?>
出力:
1002999344663
(正規表現は文字列全体と一致しました。)
今、私はなぜ私がこのようになっているのか知りたいですか?.*
代わりに(ゼロ以上)を使用した場合の違いは何[0-9]*
ですか?