PHP:删除多余的标签

时间:2015-02-13 15:33:40

标签: php regex

我得到了一些不洁净的" 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);

但它不考虑换行符和空格。

2 个答案:

答案 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