Pregunta sobre php, regex – ¿Cómo puedo eliminar un elemento html y su contenido utilizando RegEx?

6

Tengo una identificación div que me gustaría eliminar de una salida que parece

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>

¿Cómo puedo eliminar esta división y todo lo que contiene PHP y expresiones regulares?

Gracias.

¿Puedes seguir elaborando? ¿Es esto en forma de una cadena? Ian Elliott
¿Sabes el nombre de identificación y / o el nombre de la clase? ¿O hay algún identificador distinto del id y / o clase para que no elimines todos los divs que caen en esa descripción? ¿O quieres eliminar todos los divs y su contenido? Justin Giboney

Tu respuesta

3   la respuesta
13

utiliza uno de los muchos analizadores HTML de PHP. Las expresiones regulares son una forma escamosa y propensa a errores de manipular HTML.

Dicho esto puedes hacer esto:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html);

Peromuchos Las cosas pueden estar mal con esto. Por ejemplo, si eso contiene un div:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div>

usted terminará con:

 other elements etc..) </div>

como la expresión regular se detendrá en la primera</div>. Y no hay nada que realmente puedas hacer para resolver este problema (con expresiones regulares) de manera consistente.

Hecho con un analizador se parece más a esto:

$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById('ithis');
$element->parentNode->removeChild($element);
$html = $doc->saveHTML();
+1. Vale la pena comentar que (A) Si el elemento no existe, entonces$element esNULL y el->removeChild() el comando fallará con un error fatal, y (B) puede / puede querer usar el@ para causar el->loadHTML() para silenciar cualquier aviso sobre HTML mal formado:@$doc->loadHTML($html); cale_b
1

/<id.*?<\/id[^>]*>/ sin nada.

0

y la salida proviene del servidor. ¿No puedes simplemente no salir? ¿O estás tratando de ocultarlo? Si es así, en una hoja de estilo, solo di#ithis {display:none}.

Si la cadena es un retorno de alguna función en PHP que no ha escrito Y no desea muck con ese código, tiene que escribir una expresión regular muy difícil para tener en cuenta los div anidados, sintaxis variable en la salida, etc. . Recomendaría usar algún analizador (tal vez estoComponente Zend Framework) para ayudarte. Lo he usado unas cuantas veces para algo similar. Aunque si no está familiarizado con ZF, puede intentar otra cosa.

Preguntas relacionadas