Я пытаюсь заменить все теги ul на класс level0, что-то вроде этого:
<ul> <li>Test <ul class="level0"> ... </ul> </li> </ul>
будут обработаны до
<ul> <li>Test</li> </ul>
Я пытался
$_menu = preg_replace('/<ul class="level0">(.*)<\/ul>/iU', "", $_menu);
но это не работает, помогите?
Благодарю.
Yehia
Я уверен, что это дубликат, но в любом случае, вот как это сделать с DOM
$dom = new DOMDocument; // init new DOMDocument $dom->loadHTML($html); // load HTML into it $xpath = new DOMXPath($dom); // create a new XPath $nodes = $xpath->query('//ul[@class="level0"]'); // Find all UL with class foreach($nodes as $node) { // Iterate over found elements $node->parentNode->removeChild($node); // Remove UL Element } echo $dom->saveHTML(); // output cleaned HTML
try / mis вместо / iU
Ваш код работает отлично, за исключением того, что вы передаете $ _menu как строку, содержащую символы, отличные от тех, с которыми вы делаете preg_replace, несмотря на то, что визуально это выглядит нормально. Строка также содержит вкладки, разрывы и пробелы, которые RegEx не ищет. Вы можете решить эту проблему, используя:
(например)
$_menu='<ul> <li>Test <ul class="level0"> ... </ul> </li> </ul> '; $breaks = array(" ", "\n", "\r", "chr(13)", "\t", "\0", "\x0B"); $_menu=str_replace($breaks,"",$_menu); $_menu = preg_replace('/<ul class="level0">(.*)<\/ul>/iU', "", $_menu);
пытаться
$str ='<ul> <li>Test <ul class="level0"> tsts </ul> </li> </ul> '; //echo '<pre>'; $str = preg_replace(array("/(\s\/\/.*\\n)/","/(\\t|\\r|\\n)/",'/<!--(.*)-->/Uis','/>\\s+</'),array("","","",'><'),$str); echo preg_replace('/<ul class="level0">(.*)<\/li>/',"</li>",trim($str));