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

发布于 2024-10-24 22:26:34 字数 315 浏览 1 评论 0原文

<?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 。谢谢。

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

I am studying preg_match_all. I want get all the p from one article. but my code only get the second p. how to modify so that I can get the first p, either. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花桑 2024-10-31 22:26:34

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

此外, preg_match 适用于许多简单的情况。但如果您尝试任何更复杂的提取,请考虑交替使用 phpQuery 或 QueryPath ,它们允许:

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

You are missing the /ims flag at the end of your regex. Otherwise . will not match line breaks (as in your first paragraph). Actually /s would suffice, but I'm always using all three for simplicity.

Also, preg_match works for many simple cases. But if you are attempting any more complex extractions, then consider alternating to phpQuery or QueryPath which allow for:

foreach (qp($html)->find("p") as $p)  { print $p->text(); }
独守阴晴ぅ圆缺 2024-10-31 22:26:34

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

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

(.*?) is not matching newline characters. Try the /s modifier:

<?php
$str= <<<ETO
<p>one 
two</p>
<p>three</p>
ETO;
preg_match_all('/<p>(.*?)<\/p>/s',$str,$r);
print_r($r);
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文