Регулярное выражение Php для соответствия div

Это mycode

<?php /** * @author Joomlacoders * @copyright 2010 */ $url="http://urlchecker.net/html/demo.html"; $innerHtml=file_get_contents($url); //echo $innerHtml; preg_match_all("{\<div id='news-id-.*d'\>(.*)\</div\>}",$innerHtml,$matches); //<div id='news-id-160346'> var_dump($matches); ?> 

Я хочу найти весь контент в div id = 'news-id-160346'. пожалуйста, помогите мне

Используйте парсер HTML. НЕ регулярные выражения.

Проблема с регулярными выражениями заключается в том, что они не могут соответствовать вложенным структурам. Предполагая, что ваше регулярное выражение должно совпадать с одним <div> и его закрывающим тегом, нет правильного соответствия этому вводу:

 <div id="a"> <div id="b"> Foo </div> </div> <div id="c"> Bar </div> 

Поскольку, если ваше регулярное выражение является жадным, оно будет соответствовать двум верхним div, и если оно неровно, оно не будет соответствовать правильному тегу конца.

Поэтому вы должны использовать парсер HTML. С PHP, DOMDocument::loadHTML или DOMDocument::loadHTMLFile каждый делает довольно хорошую работу. (Вы можете «безопасно» игнорировать предупреждения, которые он создает: они только ошибки разметки, а сгенерированный объект DOMDocument должен быть в порядке.)

Поскольку PHP getElementById – это боль, чтобы работать, вы можете использовать DOMXpath для той же цели:

 <?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); ?> 

Используйте синтаксический анализатор, как предложили другие.

Или попробуйте это регулярное выражение:

 preg_match_all("#<div [^>]*id=['\"]news-id-\\d+['\"](.*?)</div>#", $innerHtml, $matches); print_r($matches); 

Проверьте вывод инструкции print_r чтобы понять, почему regex не рассматривается как правильный инструмент для анализа html.