如何使用简单的 html dom 获得 link

How to get link using simple html dom

Html文档是这样的

<li><h2><a href="http://beezfeed.cu.ma">Beezfeed</h2></a></li>
<li><a href="http://beezfeed.cu.ma/kuto">Beezfeed kuto</a></li>
<li><a href="http://beezfeed.cu.ma/movies">Beezfeed movies</a></li>

这里我想要最后两个 link href。这是我使用简单 html dom 的代码,所以请回答我这个问题,你能不能也用正则表达式告诉我。

$bb->load($str);
$link = $bb->find('div[class=azindex] li');

foreach ($link as $s) {
    $lin = $s->find("a");
    foreach ($lin as $li) {
        echo $li->href . "<br/>";
    }
}

我得到了 li 标签中包含的所有 link,但我不想要具有 h2 标签的 link。提前致谢

如果我必须以一种简单的方式来做,我会这样做:

$bb->load($str);
$link=$bb->find('div[class=azindex] li');
foreach($link as $s){
$lin=$s->find("a");
foreach($lin as $li){
    if(is_null($li->find("h2")) {
        echo $li->href."<br>";
    }
    /*Do nothing if h2 was found*/
}
}

我只是在 $li 上使用了 find 方法,如果找到 h2 我什么都不做,否则我打印该行。 我无法测试它,我希望它能有所帮助。

匹配正确链接的正则表达式:

$items = '
<li><h2><a href="http://beezfeed1.cu.ma">Beezfeed1</h2></a></li>
<li><p><a href="http://beezfeed2.cu.ma/">Beezfeed2</a></p></li>
<li><h4><a href="http://beezfeed3.cu.ma">Beezfeed3</h4></a></li>
<li><a href="http://beezfeed4.cu.ma/">Beezfeed4</a></li>
';

preg_match_all('(<li>(?!<h[1-9]>).*<a href="(.*)")',$items,$matches);

这匹配: http//beezfeed2.cu.ma/http//beezfeed4.cu.ma/

这将匹配所有 h1 到 h9 标签。

更严格的匹配:

preg_match_all('(<li>\s?<a href="(.*)")',$items,$matches);

仅此 returns:

http//beezfeed4.cu.ma

此正则表达式不允许

  • 之间的任何字符,除了 spaces(\s? 是可选的 space)。