正则表达式删除任何p标签之前的文本

时间:2018-08-02 09:31:38

标签: php regex html-parsing strip-tags

我在PHP字符串中有一个HTML片段。它是一些CSS文本,后跟一个或多个带有p标签的段落。

 .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>

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

2 个答案:

答案 0 :(得分:2)

尝试使用功能strstr

strstr($mystring, '<p>');

它返回从'<p>'到字符串结尾的所有内容。

strstr文档

答案 1 :(得分:2)

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

$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))