在PHP中使用正则表达式抓取div数据技术



我希望使用curl从远程服务器抓取带有div id的div数据。实际上这是正则表达式的问题,我把页面内容放在一个变量中,例如:

$url = "http://www.google.co.in/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);

获取数据的正则表达式的正确语法是什么?

$content = "<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>";

我需要这里所有的类别名称

这里有一个正则表达式,如果你想用它来代替解析器,因为它可能更快,使用更少的开销。

$content = <<<EOD
<div id="cat_list">
<h4>Browse by Category</h4>
<ul>
<li class="a"><a href="link1.php">category1</a></li>
<li class="b"><a href="link2.php">category2</a></li>
</ul>
</div>
EOD;
$categories = array();
if (preg_match('/<div id="cat_list">(.*?)</div>/is', $content, $cat_list)) {
    $matches = preg_match_all('/<li[^>]*><a href="([^"]+)">([^<]+)</a>/i', $cat_list[1], $cats);
    for ($i = 0; $i < $matches; ++$i) {
        $categories[$cats[2][$i]] = array('href' => $cats[1][$i], 'name' => $cats[2][$i]);
    }
}
var_dump($categories);

结果:

array(2) {
  ["category1"]=>
  array(2) {
    ["href"]=>
    string(9) "link1.php"
    ["name"]=>
    string(9) "category1"
  }
  ["category2"]=>
  array(2) {
    ["href"]=>
    string(9) "link2.php"
    ["name"]=>
    string(9) "category2"
  }
}

最新更新