首页 > 解决方案 > 正则表达式删除任何 p 标记之前的文本

问题描述

我在 PHP 的字符串中有一个 HTML 片段。它是一些 css 文本,后跟一个或多个 p-tag 封闭段落。

 .cs2E86D3A6{text-align:center; blarblarblar}<p>First paragraph. Keep this text</p><p>Second paragraph. Keep this text</p><p>Last paragraph.</p>

(它恰好是 strip_tags 的结果。)我想删除之前的所有垃圾文本<p>First paragraph,所以剩下的是 p 标签中的那些。

我试过了

preg_replace('@^.*(?=<p>)@','', $mystring)

但它只给了我最后一个<p>Last paragraph</p>

会告诉教我一个完成任务的正则表达式。

标签: phpregexhtml-parsingstrip-tags

解决方案


您需要延迟重复任何字符,直到到达第一个<p>. 你.*贪婪的,这意味着它会匹配尽可能多的字符,包括<p>s,只要后面有一个<p>。因此,它当前会匹配到<p>字符串中的最后一个。放在or?之后使重复变得懒惰而不是贪婪:*+

$orig = '.cs2E86D3A6{text-align:center; blarblarblar}<p>First paragraph. Keep this text</p><p>Second paragraph. Keep this text</p><p>Last paragraph.</p>';
print(preg_replace('@^.*?(?=<p>)@','', $orig))

推荐阅读