2016-06-07 70 views
0

HTML文檔獲取鏈接是這樣如何使用簡單的HTML DOM

<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,所以請回答我這個問題,你可以告訴我在正則表達式也。

$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標籤的鏈接。在此先感謝

+0

你可以去正則表達式,我不知道它,但你的任務由正則表達式完成。 – 2016-06-07 07:52:48

+0

請嘗試$ links = $ bb-> find(''li> a'); –

+0

你能告訴我這個正則表達式,任何方式謝謝你的建議 – Kumar

回答

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*/ 
} 
} 

我只是用find方法上的$裏,如果H2是發現我什麼都不做,否則我打印該行。 我無法測試它,我希望它有一點幫助。

+0

你能告訴我這個正則表達式,任何方式感謝你的建議 – Kumar

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

此正則表達式不允許<李之間的任何字符>和<a>除空格外(\ s?是可選空間)。