如何转换多个<;br/>;标记为单个<;br/>;php中的标记

如何转换多个<;br/>;标记为单个<;br/>;php中的标记,php,html,regex,Php,Html,Regex,想皈依 <br/> <br/> <br/> <br/> <br/> 进入 使用正则表达式匹配一次或多次,然后使用preg_replace(或类似)替换为,如levik的回复。您可以使用正则表达式执行此操作: preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input); preg\u replace(“/(\s*)+/”,“,$input); 如果您传

想皈依

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





进入



使用正则表达式匹配

一次或多次,然后使用preg_replace(或类似)替换为

,如levik的回复。

您可以使用正则表达式执行此操作:

preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input);
preg\u replace(“/(\s*)+/”,“
,$input);

如果您传入源HTML,将返回一个字符串,并用一个
替换它们的每一次运行。

您可能需要使用正则表达式。我没有测试以下内容,但我相信它是正确的

$text = preg_replace( "/(<br\s?\/?>)+/i","<br />", $text );
$text=preg_replace(“/()+/i”,“
”,“$text”);
我的几乎与的(+1)完全相同,只是考虑了一些不同的br格式:

preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $sInput);
preg_replace('/(]*>\s*){2,}/','
',$sInput);
不带preg_replace,但仅适用于PHP5.0.0+

$a = '<br /><br /><br /><br /><br />';
while(($a = str_ireplace('<br /><br />', '<br />', $a, $count)) && $count > 0)
{}
// $a becomes '<br />'
$a='






; 而($a=str_-ireplace('

','
',$a$count))&&$count>0) {} //$a变为“

增强的可读性,更短,无论属性如何,都能产生正确的输出:

preg_replace('{(<br[^>]*>\s*)+}', '<br/>', $input);
preg_replace('{(]*>\s*)+}','
',$input);
谢谢大家。。 使用Jakemcgraw的(+1)版本

刚刚添加了case-insensative选项

{(<br[^>]*>\s*)+}i
{(]*>\s*)+}i
测试这些正则表达式的最佳工具是:


一种快速的非正则表达式方法:

while(strstr($input, "<br/><br/>"))
{
    $input = str_replace("<br/><br/>", "<br/>", $input);
}
while(strstrstr($input,

) { $input=str_replace(“

,“
,$input”); }
用户可以输入许多变体

<br>
<br/>
< br />
<br >
<BR>
<BR>< br>







…还有更多

所以我认为下一步会更好

$str = preg_replace('/(<[^>]*?br[^>]*?>\s*){2,}/i', '<br>', $str);
$str=preg_replace('/(]*?br[^>]*?>\s*){2,}/i','
',$str);
您是否正在寻找一个可以输入HTML文件并减少BR标记的PHP程序?您的问题并不完全清楚。它是否忽略了
之间的空格?这允许在
@Sam:s之间使用任何空格字符(空格、制表符、换行符),\s表示“任何空格字符”。@levik:您应该将其更改为/(\s*)+/,以实现HTML/SGML/XHTML br的更强大/通用的匹配。@levik:替换字符串不应该是吗“
”?您的代码当前输出到HTML。比levik的稍好一些,而且应该更快。
$str = preg_replace('/(<[^>]*?br[^>]*?>\s*){2,}/i', '<br>', $str);