PHP: разделите определенный тег из строки HTML?

У меня есть следующий html:

<html> <body> bla bla bla bla <div id="myDiv"> more text <div id="anotherDiv"> And even more text </div> </div> bla bla bla </body> </html> 

Я хочу удалить все, начиная с <div id="anotherDiv"> до его закрытия <div> . Как мне это сделать?

С родным DOM

 $dom = new DOMDocument; $dom->loadHTML($htmlString); $xPath = new DOMXPath($dom); $nodes = $xPath->query('//*[@id="anotherDiv"]'); if($nodes->item(0)) { $nodes->item(0)->parentNode->removeChild($nodes->item(0)); } echo $dom->saveHTML(); 

Вы можете использовать preg_replace() как:

 $string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string); 

Вы также можете использовать Simple HTML DOM для этого.

Парсер HTML DOM, написанный на PHP5 +, позволяет вам легко манипулировать HTML!

В дополнение к ответу Хаима Евги, используя preg_replace() :

функция

 function strip_single_tag($str,$tag){ $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str); $str=preg_replace('/<\/'.$tag.'>/i', '', $str); return $str; } 

редактировать

для обработки strip_single_tag('<pre>abc</pre>','p');

 function strip_single_tag($str,$tag){ $str1=preg_replace('/<\/'.$tag.'>/i', '', $str); if($str1 != $str){ $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str1); } return $str; } 

Ресурсы

https://gist.github.com/rafasashi/59c9448f5467ea427fa3

Функция strip_tags () – это то, что вы ищете.

http://us.php.net/manual/en/function.strip-tags.php

Хорошо сказано, drpcken

Предположим, что у вас есть

$ title = "Управление сообщениями";

Затем вы можете использовать его как strip_tags ($ title, 'title');

Он вернет вам просто Управление сообщениями

Я написал их для разметки определенных тегов и атрибутов. Поскольку они являются регулярными выражениями, они не гарантируются на 100% во всех случаях, но для меня это было справедливым компромиссом:

 // Strips only the given tags in the given HTML string. function strip_tags_blacklist($html, $tags) { foreach ($tags as $tag) { $regex = '#<\s*' . $tag . '[^>]*>.*?<\s*/\s*'. $tag . '>#msi'; $html = preg_replace($regex, '', $html); } return $html; } // Strips the given attributes found in the given HTML string. function strip_attributes($html, $atts) { foreach ($atts as $att) { $regex = '#\b' . $att . '\b(\s*=\s*[\'"][^\'"]*[\'"])?(?=[^<]*>)#msi'; $html = preg_replace($regex, '', $html); } return $html; } 

как насчет этого?

 // Strips only the given tags in the given HTML string. function strip_tags_blacklist($html, $tags) { $html = preg_replace('/<'. $tags .'\b[^>]*>(.*?)<\/'. $tags .'>/is', "", $html); return $html; }