如何使用preg_match从两个HTML Div中获取数据?

问题描述 投票:0回答:2

我正在尝试在这两个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\">/

我如何更正此正则表达式?

php regex preg-match
2个回答
1
投票
似乎您的正则表达式没有问题,但是您需要打开点播模式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

2
投票
假设您的HTML格式正确,如下所示:

<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; }

© www.soinside.com 2019 - 2024. All rights reserved.