Требуется конвертировать
<br/> <br/> <br/> <br/> <br/>
в
<br/>
Вы можете сделать это с помощью регулярного выражения:
preg_replace("/(<br\s*\/?>\s*)+/", "<br/>", $input);
Это, если вы передадите исходный HTML-код, это вернет строку с единственным <br/>, заменяющим каждый запуск.
Mine почти точно такая же, как у levik (+1), просто учитывая некоторые разные форматирование br:
preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $sInput);
Улучшенная читаемость, более короткая, обеспечивает правильный вывод независимо от атрибутов:
preg_replace('{(<br[^>]*>\s*)+}', '<br/>', $input);
Спасибо всем .. Используется версия Jakemcgraw (+1)
Просто добавьте аргумент без учета регистра.
{(<br[^>]*>\s*)+}i
Отличным инструментом для тестирования этих регулярных выражений является:
без preg_replace, но работает только в PHP 5.0.0+
$a = '<br /><br /><br /><br /><br />'; while(($a = str_ireplace('<br /><br />', '<br />', $a, $count)) && $count > 0) {} // $a becomes '<br />'
Используйте регулярное выражение для соответствия <br/>
один или несколько раз, затем используйте preg_replace (или подобное) для замены с помощью <br/>
например, ответ levik.
Вероятно, вы хотите использовать регулярное выражение. Я не тестировал следующее, но считаю, что это правильно.
$text = preg_replace( "/(<br\s?\/?>)+/i","<br />", $text );
Быстрый, не регулярный подход:
while(strstr($input, "<br/><br/>")) { $input = str_replace("<br/><br/>", "<br/>", $input); }
Пользователь может ввести много вариантов
<br> <br/> < br /> <br > <BR> <BR>< br>
…и более.
Поэтому я думаю, что будет лучше следующего
$str = preg_replace('/(<[^>]*?br[^>]*?>\s*){2,}/i', '<br>', $str);