我在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>
。
会告诉我一个完成任务的正则表达式。
答案 0 :(得分:2)
答案 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))