【发布时间】:2013-02-19 21:50:15
【问题描述】:
我想用 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]*,有什么区别?
【问题讨论】:
-
*默认是贪婪的。 -
K.那么什么是'?在那里。
-
@VishalVijay:我会在回答中解释:P