【发布时间】:2011-10-12 10:12:47
【问题描述】:
我想让<br /><br />变成<br />
正则表达式的模式是什么?
注意:<br /> 标签可以连续出现 2 次以上。
【问题讨论】:
我想让<br /><br />变成<br />
正则表达式的模式是什么?
注意:<br /> 标签可以连续出现 2 次以上。
【问题讨论】:
$html = preg_replace('#(<br */?>\s*)+#i', '<br />', $html);
这将捕获 <br>、<br/> 或 <br /> 的任意组合以及它们之间的任意数量或类型的空格,并将它们替换为单个 <br />。
【讨论】:
'#<br\s*/?>(?:\s*<br\s*/?>)+#i'(只有在不止一个时才会替换。)
您可以使用s/(<br \/>)+/<br \/>/,但如果您尝试在 HTML 上使用正则表达式,您可能会做错事。
编辑:如果您有混合中断,您可以使用稍微更健壮的模式:
/(<br\ ?\/?>)+/
这也将捕获<br/> 和<br>,这在某些情况下可能很有用。
【讨论】:
msg.replace(/(<br ?\/?>)+/gi, '');
(<br />)+
将匹配它们,以便您可以使用 preg_replace 替换它们(请记住正确转义字符)。
【讨论】:
@FtDRbwLXw6 的答案很棒,尽管它没有考虑到&nbsp; 空格。我们也可以扩展这个正则表达式以包含它:
$html = preg_replace('#(<br *\/?>\s*( )*)+#', '<br>', $html);
【讨论】:
这很好用。它适用于以下所有组合。
$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>
【讨论】: