【发布时间】:2015-04-15 23:42:38
【问题描述】:
我需要一种方法来使用包装所有<p> 标记,直到标记更改之前的最后一个关闭</p> 标记。因此,每个 P 标签之前没有标签,或者除 <p> 之外的标签都会开始匹配。每个以</p> 结尾但后跟一个不是段落的标签的标签都标志着该匹配的结束。
我试过用这个:
$content = preg_replace( "/(<(p|ul)>[\s\S]*?(?=<h\d.*?>|<\/ul>))/Si", '<div class="content-block">$0</div>', $content );
但这仅在段落标签位于标题标签之间时才有效。我需要更灵活的东西。这是我的意思的一个例子(对不起,如果这是粗略的,不知道如何直观地描绘我需要的东西):
<div class="wrapper">
<p></p>
<p></p>
</div>
<h2>Information<h2>
<div class="wrapper">
<p></p>
<p></p>
<p></p>
</div>
<h2>Another Header Here</h2>
<div class="wrapper">
<p></p>
<p></p>
</div>
<h3>Header Three</h3>
<div class="wrapper">
<p></p>
<ul>List Item</ul>
<p></p>
</div>
【问题讨论】:
-
您可以编辑并添加
$content的示例吗? -
你能把你的预期输出吗?
-
如需使用正则表达式解析 HTML,请read this answer(TL;DR:不要)
-
预期输出将是包装在 div 中的
标签。喜欢:
-
也许有一种问题较少的方法来获得所需的效果。为什么要将
<P>s 包裹在<DIV>s 中?
标签: php regex html-parsing