【问题标题】:How to Regex-replace multiple <br /> tags with one <br /> tag?如何用一个 <br /> 标签正则表达式替换多个 <br /> 标签?
【发布时间】:2011-10-12 10:12:47
【问题描述】:

我想让&lt;br /&gt;&lt;br /&gt;变成&lt;br /&gt;

正则表达式的模式是什么?

注意:&lt;br /&gt; 标签可以连续出现 2 次以上。

【问题讨论】:

标签: php regex


【解决方案1】:
$html = preg_replace('#(<br */?>\s*)+#i', '<br />', $html);

这将捕获 &lt;br&gt;&lt;br/&gt;&lt;br /&gt; 的任意组合以及它们之间的任意数量或类型的空格,并将它们替换为单个 &lt;br /&gt;

【讨论】:

  • +1 用于在标签之间包含可能的空格。更好的是:'#&lt;br\s*/?&gt;(?:\s*&lt;br\s*/?&gt;)+#i'(只有在不止一个时才会替换。)
  • 上一条评论其实是这个问题唯一准确的解决方案
【解决方案2】:

可以使用s/(&lt;br \/&gt;)+/&lt;br \/&gt;/,但如果您尝试在 HTML 上使用正则表达式,您可能会做错事。

编辑:如果您有混合中断,您可以使用稍微更健壮的模式:

/(&lt;br\ ?\/?&gt;)+/

这也将捕获&lt;br/&gt;&lt;br&gt;,这在某些情况下可能很有用。

【讨论】:

  • 在 javascript 中建议为全局搜索和不区分大小写的替换添加 'gi' 标志:msg.replace(/(&lt;br ?\/?&gt;)+/gi, '');
【解决方案3】:

(&lt;br /&gt;)+

将匹配它们,以便您可以使用 preg_replace 替换它们(请记住正确转义字符)。

【讨论】:

    【解决方案4】:

    @FtDRbwLXw6 的答案很棒,尽管它没有考虑到&amp;nbsp; 空格。我们也可以扩展这个正则表达式以包含它:

    $html = preg_replace('#(<br *\/?>\s*(&nbsp;)*)+#', '<br>', $html);
    

    【讨论】:

      【解决方案5】:

      这很好用。它适用于以下所有组合。

      $html = '<br><br>
      Some text
      <br>
      <br>
      Some another<br/><br>';
      
      $html = preg_replace("/(<br.*?>\s*)+(\n)*+(<br.*?>)/","<br>",$html);
      

      $html 将改为

      <br>
      Some text
      <br>
      Some another<br>
      

      【讨论】:

        猜你喜欢
        • 2015-08-15
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        相关资源
        最近更新 更多