php preg匹配所有,所有`p`

时间:2011-03-21 10:42:25

标签: php preg-match-all

<?php
$str= <<<ETO
<p>one
two</p>
<p>three</p>
ETO;
preg_match_all('/<p>(.*?)<\/p>/',$str,$r);
print_r($r);
?>

我正在研究preg_match_all。我希望从一篇文章中获取所有p。但我的代码只获得第二个p。如何修改,以便我可以获得第一个p。感谢。

2 个答案:

答案 0 :(得分:4)

您在正则表达式末尾缺少/ims标记。否则.将不会与换行符匹配(如第一段中所示)。实际上/s就足够了,但为了简单起见,我总是使用这三个。

此外,preg_match适用于许多简单的情况。但是如果你正在尝试任何更复杂的提取,那么考虑交替使用phpQuery或QueryPath,这允许:

foreach (qp($html)->find("p") as $p)  { print $p->text(); }

答案 1 :(得分:2)

(。*?)不匹配换行符。尝试使用/ s修饰符:

<?php
$str= <<<ETO
<p>one 
two</p>
<p>three</p>
ETO;
preg_match_all('/<p>(.*?)<\/p>/s',$str,$r);
print_r($r);
?>