No puedo encontrar la expresión regular que necesito para analizar lo siguiente.
<div id="MustBeInThisId">
<div class="ValueFromThisClass">
The Value I need
</div>
</div>
Como puedes ver tengo un div envoltorio con una identificación. Ese div contiene varios otros divs pero solo uno de esos divs del que necesito el valor.
Respuestas
4 para la respuesta № 1Si está intentando extraer algunos datos de un documento HTML, no debe usar expresiones regulares.
En su lugar, debe usar un analizador DOM: están hechos exactamente para eso.
En PHP, usarías el DOMDocument
clase, y su DOMDocument::loadHTML()
Método, para cargar el contenido HTML.
Luego, puedes trabajar con métodos como:
DOMDocument::getElementById()
para obtener un elemento si sabes que esid
,DOMDocument::getElementsByTagName()
para obtener todos los elementos que tienen una etiqueta dada.
Incluso puedes trabajar con DOMXpath
para ejecutar consultas XPath en su contenido HTML, lo que le permitirá buscar casi cualquier cosa en él.
En tu caso, supongo que algo como esto debería hacer el truco.
En primer lugar, obtener su contenido HTML en una cadena (o usar DOMDocument::loadHTMLFile()
) :
$html = <<<HTML
<p>hello</p>
<div>
<div id="MustBeInThisId">
<div class="ValueFromThisClass">
The Value I need
</div>
</div>
<div>
HTML;
Luego, cárgalo a un DOMDocument
ejemplo:
$dom = new DOMDocument();
$dom->loadHTML($html);
Instanciate un DOMXPath
objeto, y lo utiliza para consultar su objeto DOM:
Mi expresión XPath podría ser un poco más compleja de lo necesario ... No soy muy bueno con esos ...
$xpath = new DOMXPath($dom);
$items = $xpath->query("//div[@id="MustBeInThisId"]/div[@class="ValueFromThisClass"]");
Y, finalmente, trabajar con los resultados de esa consulta:
if ($items->length > 0) {
var_dump( trim( $items->item(0)->nodeValue ) );
}
Y aquí está tu resultado:
string "The Value I need" (length=16)
1 para la respuesta № 2
Usa algo como simplehtmldom - Hará tu vida mucho más fácil.
$html = str_get_html($source_code);
$tag = $html->find("#MustBeInThisId .ValueFromThisClass", 0);
$the_value_i_need = $tag->innertext;
0 para la respuesta № 3
Regex no puede "analizar HTML ya que HTML no es un lenguaje regular. Deberías usar DOMDocument.
Entonces obtienes buenas funciones como getElementById
:)
0 para la respuesta № 4
O prueba una biblioteca de javascript como JQuery. Creo que es la forma más fácil de hacer lo que quieres.