php - 正则表达式删除任何 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>
。
会告诉教我一个完成任务的正则表达式。
解决方案
您需要延迟重复任何字符,直到到达第一个<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))
推荐阅读
- flutter - Flutter中的json.decode和jsonDecode有什么区别?
- perl - Expect.pm send 修剪数字符号
- php - PHP JSON解码到数组以获取特定键值(所有字段同名)
- python - 如何将 Number.txt 文件转换为列表
- python - 这个嵌套循环的列表理解的正确语法?
- mysql - 列出所有可以在运行时修改的变量
- c# - OData v4.0 - 将值更改为结果
- c# - 使用 foreach 同时将数据插入 .CSV 文件
- php - 如果第一行不为空,如何将值插入第二行?数据库
- javascript - 如何使用 javascript 使用下拉菜单过滤 html 表的数据