<?php
// eliminar esta etiqueta usando expresiones regulares php
// https://es.stackoverflow.com/q/131277/127
$html = '
<p><figure><img src="xxxx"></figure></p>
<p>
<figure>
<img src="2222">
</figure>
</p>';
//Generar el DOM
$dom = new DOMDocument;
$libxml_opciones = LIBXML_COMPACT | LIBXML_HTML_NODEFDTD | LIBXML_NONET | LIBXML_NOERROR;
@$dom->loadHTML($html, $libxml_opciones);
//Generar un XPath para búsquedas
$xpath = new DOMXpath($dom);
//Obtener todos los tags <p>
$p_nodelist = $dom->getElementsByTagName('p');
//Bucle para cada <p> (en orden inverso para preservar la estructura)
for ($i = $p_nodelist->length; --$i >= 0; ) {
$p = $p_nodelist->item($i);
$p_hijos = $xpath->query('./*',$p);
//Si el <p> tiene un único hijo, y ese hijo es un <figure>
if ($p_hijos->length == 1 && $p_hijos->item(0)->tagName == 'figure') {
$figure = $p_hijos->item(0);
//Si el <figure> tiene un único hijo, y ese hijo es una <img>
$figure_hijos = $xpath->query('./*',$figure);
if ($figure_hijos->length == 1 && $figure_hijos->item(0)->tagName == 'img') {
//REEMPLAZAR todo el <p> por solamente el <figure>
$p->parentNode->replaceChild($figure,$p);
}
}
}
//Guardar el html
$resultado = '';
foreach ($dom->documentElement->lastChild->childNodes as $elem) {
$resultado .= $dom->saveHTML($elem);
}
//Imprimir el resultado
echo $resultado;
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
<figure><img src="xxxx"></figure>
<figure>
<img src="2222">
</figure>