Use an HTML parser. NOT regular expressions.
El problema con las expresiones regulares es que ellos no pueden igualar las estructuras anidadas. Asumiendo que su expresión regular debe coincidir con una sola <div>
y su etiqueta de cierre, no hay manera para que coincida correctamente esta entrada:
<div id="a">
<div id="b">
Foo
</div>
</div>
<div id="c">
Bar
</div>
Porque si la expresión regular es codicioso, que coincidirá con los dos divs superiores, y si es ungreedy , no coincidirá con la etiqueta final correcta.
Por lo tanto, debe usar un analizador HTML. Con PHP, DOMDocument::loadHTML
o DOMDocument::loadHTMLFile
cada uno hace un buen trabajo. (Puede "ignorar" de forma segura las advertencias que genera: solo son errores de marcado, y el objeto generado DOMDocument
debería estar más o menos bien.)
Dado que PHP getElementById es difícil de poner a trabajar, puede usar DOMXPath para el mismo propósito:
<?php
$url = "http://urlchecker.net/html/demo.html";
$d = new DOMDocument();
$d->loadHTMLFile($url);
$xpath = new DOMXPath($d);
$myNews = $xpath->query('//@id="news-id-160346"')->item(0);
?>
Hola tenían probar todas respuesta, pero no tiene éxito Advertencia: DOMDocument :: loadHTMLFile() [domdocument.loadhtmlfile]: etiqueta de cierre inesperado: una en http://urlchecker.net/html/demo.html, la línea: 26 en /home/urlcheck/public_html/html/test.php en la línea 10 – Thoman
@Thoman: en realidad ha tenido éxito. loadHTMLFile simplemente te dice los problemas que encontró durante el análisis. Puede cerrarlo con el operador '@': '@ $ d-> cargarHTMLFile ($ url);' – zneak
Lo intento pero este código no coincide con todo el contenido en id = 'news-id-160346' – Thoman