Мне нужно удалить определенный div из строки.
Мой код:
$varz = "<div class="post-single">
<p> Hello all! </p>
<div class="ad">I want to remove this div</div>
</div>";
$varzfinal = preg_replace('/<div class="ad">.+<\/div>/siU', '', $varz);
echo $varzfinal;
Мне нужно удалить это: <div class="ad">I want to remove this div</div>
Какой лучший способ достичь этого?
Мы все терпеливы. Регулярные выражения создаются для использования в особых случаях. Здесь PHP сообщество сделано для нас DOMDocument. Так почему бы не использовать лучшее из этого ?!
<?php
$varz = <<< EOT
<div class="post-single">
<p> Hello all! </p>
<div class="ad">I want to remove this div</div>
</div>
EOT;
$d = new DOMDocument();
$d->loadHTML($varz);
$s = new DOMXPath($d);
foreach($s->query('//div[contains(attribute::class, "ad")]') as $t )
$t->parentNode->removeChild($t);
echo $d->saveHTML();
Вот исправленный PHP / regex, работает для классов «ad» и «ad1» или любого другого числа:
<?php
$varz = '<div class="post-single">
<p> Hello all! </p>
<div class="ad">I want to remove this div</div>
<div class="ad2">I want to remove this div</div>
<div class="a">I dont want to remove this div</div>
<div> cool </div>
</div>';
$varzfinal = preg_replace('/<div class="ad(\d*)?">.+<\/div>/siU', '', $varz);
echo $varzfinal;
?>
Чтобы исправить кодировку добавить <meta charset="utf-8">
в разделе.