包装<p>和所有后续</p> <p>标签,直到标签更改</p>

时间:2015-04-15 23:42:38

标签: php regex html-parsing

我需要一种方法来使用包装所有<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>

1 个答案:

答案 0 :(得分:0)

自己想出来。我需要一个更通用的选择器来选择除特定标签之外的所有东西。以下是我提出的建议:

$content = preg_replace( "/((<p|<ul|<ol|<blockquote)(?:(?!\n<h|\n<table).)*)/sm", '<div class="content-block">$0</div>', $content );