Это - 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);
?>
Я хочу, находят все содержание в идентификаторе отделения ='news-id-160346'.Пожалуйста, помогите мне!
Использовать парсер HTML. НЕ регулярные выражения.
Проблема с регулярными выражениями в том, что они не могут соответствовать вложенным структурам. Если предположить, что ваше регулярное выражение должно соответствовать одному Потому что если ваше регулярное выражение жадное, оно будет соответствовать двум верхним div'ам, а если оно нежадное, оно не будет соответствовать правильному концевому тегу. Поэтому вы должны использовать парсер HTML. В PHP, Поскольку заставить работать PHP getElementById довольно сложно, вы можете использовать DOMXpath для той же цели:<div id="a">
<div id="b">
Foo
</div>
</div>
<div id="c">
Bar
</div>
DOMDocument::loadHTML
или DOMDocument::loadHTMLFile
каждый из них делает достаточно хорошую работу. (Вы можете "смело" игнорировать предупреждения, которые они выдают: это всего лишь ошибки разметки, и сгенерированный объект DOMDocument
должен быть в полном порядке.)<?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
, чтобы понять, почему регулярное выражение не считается правильным инструментом для синтаксического анализа HTML.