2010-09-02 18 views
43

Duplicar posible:
Best methods to parse HTMLPHP analizar HTML

¿Cómo puedo analizar el código HTML que tuvo lugar en una variable PHP si algo como:

<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG! 

quiero a solo obtenga el texto que está entre los títulos y entiendo que no es una buena idea usar expresiones regulares.

+4

@todo el que cerró esto está duplicado. Esto es diferente porque OP no quiere el texto 'T1, T2, T3' pero el texto después de un encabezado termina y antes de que comience el próximo encabezado. p.ej. 'Lorem ipsum'. Entonces, * este * es diferente. Por favor echa un vistazo. – shamittomar

Respuesta

105

Uso de PHP Document Object Model:

<?php 
    $str = '<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG'; 
    $DOM = new DOMDocument; 
    $DOM->loadHTML($str); 

    //get all H1 
    $items = $DOM->getElementsByTagName('h1'); 

    //display all H1 text 
    for ($i = 0; $i < $items->length; $i++) 
     echo $items->item($i)->nodeValue . "<br/>"; 
?> 

Esto da salida como:

T1 
T2 
T3 

[EDIT]: Después de OP Aclaración:

Si desea que el contenido como Lorem ipsum. etc, puede utilizar directamente esta expresión regular:

<?php 
    $str = '<h1>T1</h1>Lorem ipsum.<h1>T2</h1>The quick red fox...<h1>T3</h1>... jumps over the lazy brown FROG'; 
    echo preg_replace("#<h1.*?>.*?</h1>#", "", $str); 
?> 

este salidas:

Lorem ipsum.The rápido zorro rojo ...... salta sobre la rana marrón perezoso

+0

Gracias, pero necesito obtener el texto entre

como en: "Lorem ipsum.", "El zorro rojo rápido ..." etc. Así que no el texto entre las etiquetas H1, sino el texto entre una terminación etiqueta y una partida

. – Francisc

+0

@Francisc, he actualizado la respuesta. – shamittomar

+0

Eso está más cerca, gracias. Trataré de ser más claro: quiero obtener el texto entre los encabezados, contar su longitud y decidir si quiero ocultar parte de él. Tu respuesta es muy útil. Pero lo que quiero hacer es mantener todo el texto, solo agregue un poco de html para ocultar parte de él. – Francisc