【问题标题】:Wrapping <p> and all subsequent <p> tags until the tag changes包装 <p> 和所有后续 <p> 标记,直到标记更改
【发布时间】:2015-04-15 23:42:38
【问题描述】:

我需要一种方法来使用包装所有&lt;p&gt; 标记,直到标记更改之前的最后一个关闭&lt;/p&gt; 标记。因此,每个 P 标签之前没有标签,或者除 &lt;p&gt; 之外的标签都会开始匹配。每个以&lt;/p&gt; 结尾但后跟一个不是段落的标签的标签都标志着该匹配的结束。

我试过用这个:

$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 中的

    标签。喜欢:

  • 也许有一种问题较少的方法来获得所需的效果。为什么要将&lt;P&gt;s 包裹在&lt;DIV&gt;s 中?

标签: php regex html-parsing


【解决方案1】:

我自己想出来的。我需要一个更通用的选择器来选择除特定标签之外的所有内容。这是我想出的:

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

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2015-02-21
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2019-11-26
    • 2010-09-06
    相关资源
    最近更新 更多