我得到了一些不洁净的" html字符串我需要清理。
我想更换"超过2"带有2个html换行符的html换行符。
以下字符串:
$string = 'ytefey soeije hesouhodeseojedowe<br><br>
<br>ioueshe oiwj<br /><br />oijeewje<br /><br> <br> <br>';
应该结束这样的事情:
$string = 'ytefey soeije hesouhodeseojedowe<br><br>
ioueshe oiwj<br /><br />oijeewje<br><br> ';
到目前为止我得到了这个:
$string = preg_replace('#(<br>|<br />){2,}#i', '<br><br>', $string);
但它不考虑换行符和空格。
答案 0 :(得分:7)
您可以将preg_replace()
与简单的正则表达式一起使用:
/(<br>\s*|<br \/>\s*){3,}/i
基本上它匹配<br>
或<br />
((<br>|<br \/>)
),前面有零个或多个空格(\s*
)至少3次或更多次({{ 1}})。
{3,}
答案 1 :(得分:0)
以下内容适用于字符串中的任何类型换行,并且速度更快,因为它没有PCRE必须记住的匹配组。
<?php
$string = "
ytefey soeije hesouhodeseojedowe<br><br>
<br>ioueshe oiwj<br /><br />oijeewje<br /><br> <br> <br>
foo<br />
<br />
bar<br/>
";
// @see https://regex101.com/r/vR6rU5/2
$string = preg_replace_all('/(?:<br\s*\/?>(?:\s|\R)*){2,}/iu', "<br><br>", $string);
// Maybe trim excessive line feeds and breaks at the beginning and end?
// @see https://regex101.com/r/uS9jW0/1
$string = preg_replace('/(?:^\R*(?:<br\s*\/?>)*|(?:<br\s*\/?>)*\R*$)/iu', "", $string);
print_r($string);
// ytefey soeije hesouhodeseojedowe<br><br>ioueshe oiwj<br><br>oijeewje<br><br>foo<br><br>bar