JavaScript — удалить div с именем класса из строки с переполнением стека

Мне нужно удалить определенный 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>

Какой лучший способ достичь этого?

0

Решение

Мы все терпеливы. Регулярные выражения создаются для использования в особых случаях. Здесь 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();
6

Другие решения

Вот исправленный 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"> в разделе.

0

По вопросам рекламы [email protected]