Preg匹配多个br标签

时间:2014-10-20 17:53:05

标签: php regex

我有一个textarea用户输入注释,我使用nl2br允许他们在文本块之间添加空格。我想替换连续出现3个或更多br标签的情况,并用一个标签替换它们。

一个或两个br标签没有被替换它们很好但是还有更多需要用一个标签替换。

这是我到目前为止的正则表达式

$comment = preg_replace('/(<br \/>){3,}/', '<br />', $comment);

$ comment变量是

one<br />
<br />
<br />
<br />
<br />
two<br />
<br />
<br />
<br />
<br />
three<br />
<br />
four

将正则表达式更改为

$comment = preg_replace('/(<br \/>)/', '-', $comment);

用连字符替换所有br标签,所以它似乎与{3,}有关,但我不确定。

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式。由于重复标记可能位于同一行或由换行序列分隔,因此您需要考虑空格。

$comment = preg_replace('~(?:<br />\s*){3,}~', '<br />', $comment);

Regex Explanation | Code Demo

如果由于某些逻辑原因它删除了您想要保留的某些空格,我会使用...

$comment = preg_replace('~(?:<br />\R?){3,}~', '<br />', $comment);

答案 1 :(得分:1)

你也可以试试下面的正则表达式,

(?:<br \/>\n?){3,}

DEMO

通过在最后添加可选的\n,如果出现,也会匹配换行符。