Use an HTML parser. NOT düzenli ifadeler. A>
Düzenli ifadeler ile sorun iç içe geçmiş yapıları maç olamaz olmasıdır. Senin regex varsayarsak tek <div> maç ve kapanış etiketi, doğru bu giriş maç için hiçbir yolu yoktur gerekir:
<div id="a">
<div id="b">
Foo
</div>
</div>
<div id="c">
Bar
</div>
Düzenli ifade açgözlü ise, bu iki üst divs maç olacak, ve bu ungreedy ise, bu doğru bitiş etiketi maç olmayacak çünkü.
Bu nedenle, bir HTML çözümleyici kullanmalısınız. PHP ile, DOMDocument::loadHTML or DOMDocument::loadHTMLFile each do a fairly good job. (You may "safely" ignore the warnings it generates: they're only markup errors, and the generated DOMDocument nesne hemen hemen tamam olmalıdır.)
PHP getElementById işe almak için bir ağrı olduğundan, aynı amaç için DOMXPath kullanabilirsiniz:
<?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);
?>