如何在PHP中用正则表达式提取多个div
这是我的问题。我正在抓取一个网站的数据,并希望使用正则表达式获得三个类似div的内容。它们的结构如下:如何在PHP中用正则表达式提取多个div,php,html,regex,Php,Html,Regex,这是我的问题。我正在抓取一个网站的数据,并希望使用正则表达式获得三个类似div的内容。它们的结构如下: <div id="cphMain_pnlBreakfastItems" class="bp2-wdn-col-one-third"> <h4>blah blah</h4> <span>content</span> <span>other content</spa
<div id="cphMain_pnlBreakfastItems" class="bp2-wdn-col-one-third">
<h4>blah blah</h4>
<span>content</span>
<span>other content</span>
</div>
<div id="cphMain_pnlLunchItems" class="bp2-wdn-col-one-third">
<h4>blah blah</h4>
<span>content</span>
<span>other content</span>
</div>
<div id="cphMain_pnlDinnerItems" class="bp2-wdn-col-one-third">
<h4>blah blah</h4>
<span>content</span>
<span>other content</span>
</div>
废话
内容
其他内容
废话
内容
其他内容
废话
内容
其他内容
有3个独立的分区:早餐、午餐和晚餐。我正在尝试使用preg_match将它们作为这样的比赛
preg_match('/<div id="cphMain_pnl.*Items"[\s\S]*\/div>/s', $page, $match);
preg_match('//s',$page,$match);
然而,在运行这个之后,我将所有三个div作为一个匹配,而不是三个单独的匹配。我怎样才能把它们分为三组
我试着用DOM来做这件事,但是当我得到div的内容时,它去掉了标记,所以我不知道什么内容是什么。你一直在使用贪婪匹配,而在这种情况下,你最好使用惰性匹配。如果一个接一个有3个div,则要匹配的
项目
属于晚餐项目
,而不是早餐项目
(
匹配到最后一个项目
)
要将贪婪匹配变为懒惰匹配,请在量词后添加一个?
。此外,如果您使用的是s
标志,则最好使用
而不是[\s\s]
:
preg_match_all('~<div id="cphMain_pnl.*?Items".*?</div>~s', $page, $match);
preg_match_all(“~@Dai:不,请不要重复该问题。这对任何正在寻找该问题答案的人都没有帮助。这只是一种咆哮,并不适合作为重复目标。请查看原因。)@Dai那里没有真正好的答案。我只是需要一个快速的解决方案,而不是一个关于正则表达式有多糟糕的怪人。我说我的问题是得到一个结果而不是3个,甚至与你链接的问题不一样。