Intereting Posts
Установка груши для macports PHP5 Laravel 4: Как получить выбранные / конкретные столбцы во многих отношениях? Какова наилучшая практика для доступа к конфигурации внутри функции? Неустранимая ошибка: вызов неопределенной функции imagefilter () Как передать некоторые данные в ValidationFilter? В PHP, как извлечь несколько адресов электронной почты из блока текста и поместить их в массив? Формы, сообщения и кнопки отправки codeigniter возвращает "Message: Undefined property: Welcome :: $ load" пытается загрузить вспомогательную библиотеку lib Получайте платежную информацию в разделе обзора заказа одной страницы в Magento расположение заголовка php vs php_redirect перенаправить пользователей на страницу входа в систему Перенаправление Laravel из частного метода Как использовать стайку в PHP? Разделение данных PHP / MySQL на 3 столбца SIGCHILD не обнаруживает сигнал, когда умирает детский процесс

Reg выражение для удаления пустых тегов (любой из них)?

Мне нравится удалять пустой пустой тег html, который пуст или содержит пробелы.

что-то вроде получить:

$string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>"; 

чтобы:

 $string ="<b>text</b>=; 

Вот подход с DOM :

 // init the document $dom = new DOMDocument; $dom->loadHTML($string); // fetch all the wanted nodes $xp = new DOMXPath($dom); foreach($xp->query('//*[not(node()) or normalize-space() = ""]') as $node) { $node->parentNode->removeChild($node); } // output the cleaned markup echo $dom->saveXml( $dom->getElementsByTagName('body')->item(0) ); 

Это приведет к чему-то вроде

 <body><b>text</b></body> 

XML-документам нужен корневой элемент, поэтому его невозможно исключить. Вы можете str_replace хотя. Вышеупомянутое может обрабатывать разбитый HTML.

Если вы хотите выборочно удалить определенные узлы, отрегулируйте запрос XPath.

Также см

  • Как вы анализируете и обрабатываете HTML / XML в PHP?
  • Поиск узла по значению, содержащему пробелы с использованием XPath
 function stripEmptyTags ($result) { $regexps = array ( '~<(\w+)\b[^\>]*>\s*</\\1>~', '~<\w+\s*/>~' ); do { $string = $result; $result = preg_replace ($regexps, '', $string); } while ($result != $string); return $result; } $string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>"; echo stripEmptyTags ($string); 

Вам нужно будет запустить код несколько раз, чтобы сделать это только с регулярными выражениями.

регулярное выражение, которое делает это:

 /<(?:(\w+)(?: [^>]*)?`> *<\/$1>)|(?:<\w+(?: [^>]*)?\/>)/g 

Но, например, на вашей строке вы должны запустить ее хотя бы дважды. Как только он удалит <br/> а второй раз удалит оставшиеся <p> </p> .