除每行一个外,删除所有的 <br /> 标签?

3
我该如何将这个转换为代码:


...<br />
<br />
...<br />
...<br />
<br />
<br />
...<br />

使用PHP实现如下:

...<br />
...<br />
...<br />
...

请注意删除第一个和最后一个
标签,即使它只被提到一次。在中间我们只保留一个
标签。

3
朋友不应使用正则表达式来解析HTML。 - Ether
虽然我基本上同意你的观点,但这并不是在解析HTML,只是压缩重复字符串而已。 - Daniel Vandersluis
@Daniel: 你从未见过 <br style="clear:both;"> 这种标签吗? <br> 标签同样可以很容易地添加各种属性。 - Wrikken
@Wrikken事实上我有(请看我的回答;))。但是“Duplicate”确实应该用引号括起来。 - Daniel Vandersluis
2个回答

13
preg_replace('#<br />(\s*<br />)+#', '<br />', $your_string);

这段代码将替换多个 <br /> 实例,可选地用空格分隔,替换为单个 <br />

请注意模式中的 <br /> 与其完全匹配。如果您想更严谨一些,可以将其更改为 <br[^>]*>,这将允许具有属性(例如 <br style="clear: both;" />)或没有尾部斜杠的 <br> 标签。


1
首先,您应该编辑您的问题,因为第一个<br />没有出现。

然后,要替换所有重复的<br />和第一个和最后一个,您可以执行以下操作:
$str = <<<EOD
<br />
...<br />
<br />
...<br />
...<br />
<br />
<br />
...<br />
EOD;

$str = preg_replace('~(^<br />\s*)|((?<=<br />)\s*<br />)|(<br />\s*$)~', '', $str);
echo "===\n",$str,"\n===\n";

这将输出:

===
...<br />
...<br />
...<br />
...
===

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接