如何使用简单的html dom

时间:2016-06-07 07:51:17

标签: php 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>

这里我想要最后两个链接href。这是我的代码我使用简单的html dom,所以请回答我这个问题,请你在regex中告诉我。

$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标签的所有链接,但我不想要有h2标签的链接。提前致谢

2 个答案:

答案 0 :(得分:0)

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

$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我什么都不做,否则我打印该行。 我无法测试它,我希望它有所帮助。

答案 1 :(得分:0)

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

$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);

这只会返回:

<强> HTTP // beezfeed4.cu.ma

此正则表达式不允许&lt; li&gt;之间的任何字符和&lt; a&gt;除了空格(\ s?是可选空格)。