<?
#このファイルのソース
echo '<div class="px-5 bg-dark text-white">';highlight_file(__FILE__);echo '</div>';
#こんな HTML タグがあったとして
$html = '<div class=cat>class cat</div>
<div class=dog id="cat">class dog id cat</div>
<img src="http://localhost/cat.gif" alt="src cat.gif">
<img data-lazy=test data-src="http://localhost/test-cat.gif" alt="data-src cat.gif">
<a id="TEST" href="//cat.com">id TEST href //cat.com</a>
<div class="test cat">class test cat</div>';
#こんな風にまとめて要素を指定して
$cat = '//*[contains(@class | @data-src | @src | @href | @id, "cat")]';
#DOM して
$dom = new DOMDocument();
$dom->loadHTML($html);
#XPath して
$xpath = new DOMXPath($dom);
echo 'BEFORE
<div class="px-5 py-3 bg-dark text-white">', hs($dom->saveHTML($dom->documentElement)), '</div>';
#一気に除去を試みると
foreach ($xpath->query($cat) as $a) if ($a) $a->parentNode->removeChild($a);
#こんな風に取りこぼすのは、除去したい要素よりも先に、「一致しない指定要素」があるから。完。
echo 'AFTER
<div class="px-5 py-3 bg-dark text-white">', hs($dom->saveHTML($dom->documentElement)), '</div>';
<html><body><div class="cat">class cat</div>
<div class="dog" id="cat">class dog id cat</div>
<img src="http://localhost/cat.gif" alt="src cat.gif">
<img data-lazy="test" data-src="http://localhost/test-cat.gif" alt="data-src cat.gif">
<a id="TEST" href="//cat.com">id TEST href //cat.com</a>
<div class="test cat">class test cat</div></body></html>
AFTER
<html><body>
<div class="dog" id="cat">class dog id cat</div>
<a id="TEST" href="//cat.com">id TEST href //cat.com</a>
</body></html>