Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中用正则表达式提取多个div_Php_Html_Regex - Fatal编程技术网

如何在PHP中用正则表达式提取多个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的内容。它们的结构如下:

    <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个,甚至与你链接的问题不一样。