<?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
。感谢。
答案 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);
?>