2015-02-13 5 views
1

У меня есть некоторая «нечистая» строка html, которую мне нужно очистить.PHP: Удалить лишние <br> теги

Я хочу заменить строки «более 2» html строк в строке с 2 html linebreaks.

Так следующая строка:

$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); 

Но это не принимает переносы строк и пробелы в учетную запись.

ответ

7

Вы можете использовать preg_replace() с простым регулярным выражением:

/(<br>\s*|<br \/>\s*){3,}/i 

В основном это либо соответствует <br> или <br /> ((<br>|<br \/>)) с нуля или более пробелов перед ними (\s*) по крайней мере 3 или более раз ({3,}).

$string = preg_replace("/(<br>\s*|<br \/>\s*){3,}/i", "<br><br>", $string); 
+0

ах \ s исправит ... спасибо большое человеку –

+0

@KristianRafteseth Добро пожаловать! Хороший день: D – Rizier123

+0

вы тоже. и да им хорошо, с пивом;) –

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 
Смежные вопросы