我正在尝试在这两个div之间获取数据:
--<div id="p_tab4" class="p_desc" style="display: block;">
--<div id="p_top_cats" class="p_top_cats">
我正在使用下面的正则表达式,但是并没有给我任何东西:
/<div id=\"p_tab4\" class=\"p_desc\" style=\"display: block;\">(.*?)<div id=\"p_top_cats\" class=\"p_top_cats\">/
我如何更正此正则表达式?
s
,以便正则表达式中的点也将与换行符(换行符匹配。]
~<div id=\"p_tab4\" class=\"p_desc\" style=\"display: block;\">(.*?)<div id=\"p_top_cats\" class=\"p_top_cats\">~s
代码:
$re = '~<div id=\"p_tab4\" class=\"p_desc\" style=\"display: block;\">(.*?)<div id=\"p_top_cats\" class=\"p_top_cats\">~s'; $str = "--<div id=\"p_tab4\" class=\"p_desc\" style=\"display: block;\">\n--<div id=\"p_top_cats\" class=\"p_top_cats\">"; preg_match($re, $str, $matches); echo $matches[1];
DEMO
<div id="p_tab4" class="p_desc" style="display: block;">...</div>
some stuff in between
<div id="p_top_cats" class="p_top_cats">
</div>
您可以使用DOMDocument和XPath:
$html = <<<'EOS' <div id="p_tab4" class="p_desc" style="display: block;"> some stuff in between <div id="p_top_cats" class="p_top_cats"> </div> </div> EOS; $doc = new DOMDocument; $doc->loadHTML($html); $xpath = new DOMXPath($doc); $query = '//node()[preceding-sibling::div[@id="p_tab4"] and following-sibling::div[@id="p_top_cats"]]'; foreach ($xpath->query($query) as $node) { echo $node->textContent, PHP_EOL; }