Preg匹配多个br标记


Preg Match multiple br tags

我有一个文本区域,用户可以在其中输入注释,我使用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,}有关,但我不确定。

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

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

Regex解释|代码演示

如果出于某种逻辑原因,它删除了您想要保留的某些空白,我会使用。。。

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

您也可以尝试以下regex,

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

演示

通过在最后添加一个可选的'n,也将匹配换行符(如果存在)。