Php 如何使用我的条件替换多个的preg_匹配模式?

Php 如何使用我的条件替换多个的preg_匹配模式?,php,regex,preg-replace,preg-match,Php,Regex,Preg Replace,Preg Match,如何在包含大量数据的字符串中为replace multiply创建preg_匹配模式 这是我的替换条件。 1如果只有一个或两个,则不要更换 2如果有两个以上,则将其更换为两个 结论我的条件意味着我最多允许两次。 这是我尝试过的,但它只替换了一个 $detail = nl2br(addslashes($_POST['detail'])); $detail = preg_replace('#(<br */?>\s*)+#i', '<br />', $detail); 我以前

如何在包含大量数据的字符串中为replace multiply创建preg_匹配模式

这是我的替换条件。 1如果只有一个或两个,则不要更换

2如果有两个以上,则将其更换为两个

结论我的条件意味着我最多允许两次。 这是我尝试过的,但它只替换了一个

$detail = nl2br(addslashes($_POST['detail']));
$detail = preg_replace('#(<br */?>\s*)+#i', '<br />', $detail);
我以前也搜索过这个,但没有找到任何帮助。这可能是因为我对preg_替换没有经验。所以,我需要你的帮助,我将非常感激。多谢各位

如果有两个以上,则更换为两个

它可能会帮助您使用替换

(<br\s?\/>){3,}
示例代码:

$re = "/(<br\\s?\\/>){3,}/i";
$str = "...";
$subst = '<br \/><br \/>';

$result = preg_replace($re, $subst, $str);
使用此代码:

$detail = preg_replace('#(<br\s*\/?>\s*){3,}#i', '<br /><br />', $detail);
将取代。。。当它们同时出现3次或以上时。它还负责它们之间的额外空间


简单地说:不要。使用dom引擎,查找哪个具有更多同级标记,然后删除同级标记。请看演示。@Marcus抱歉,我错过了一点*。看我的例子。是的@zessx它成功了。但为什么在插入数据库时,它仍然有换行符。因为nl2br在\n之前添加了一个标记,所以它不会替换\n。治疗后,应使用str\u replace\n,$detail将其删除。
$re = "/(<br\\s?\\/>){3,}/i";
$str = "...";
$subst = '<br \/><br \/>';

$result = preg_replace($re, $subst, $str);
$detail = preg_replace('#(<br\s*\/?>\s*){3,}#i', '<br /><br />', $detail);