2011-02-24 49 views
0

我想獲取每個錨點的內文。然後打印結果。但是,id屬性中的「ctl」每次都會增加01。Preg match,其中id屬性更改1

我必須通過id屬性匹配它們,因爲這些錨點所在的頁面。

我該怎麼做?

<a id="ctl00_mainContent_rpLeaderboard_ctl01_hypServiceRecord" href="/Stats/Reach/default.aspx?player=DJ+DarkRecon">DJ DarkRecon</a> 

<a id="ctl00_mainContent_rpLeaderboard_ctl02_hypServiceRecord" href="/Stats/Reach/default.aspx?player=X+PR+Legacy+X">X PR Legacy X</a> 

<a id="ctl00_mainContent_rpLeaderboard_ctl03_hypServiceRecord" href="/Stats/Reach/default.aspx?player=Forgiver2">Forgiver2</a> 
+6

使用HTML解析器 – 2011-02-24 00:29:20

+0

你只是想要內文?如果是這樣,我會想象這些屬性是不相關的。 – Orbling 2011-02-24 00:29:22

+0

我必須通過id屬性匹配它們,因爲這些錨點所在的頁面 – AndrewFerrara 2011-02-24 00:31:59

回答

1

下面是使用HTML解析器一個相當快速的解決方案:

$dom = new DomDocument; 
$dom->loadHTML(' 
<!DOCTYPE html> 
<a id="ctl00_mainContent_rpLeaderboard_ctl01_hypServiceRecord" href="/Stats/Reach/default.aspx?player=DJ+DarkRecon">DJ DarkRecon</a> 
<a id="ctl00_mainContent_rpLeaderboard_ctl02_hypServiceRecord" href="/Stats/Reach/default.aspx?player=X+PR+Legacy+X">X PR Legacy X</a> 
<a id="ctl00_mainContent_rpLeaderboard_ctl03_hypServiceRecord" href="/Stats/Reach/default.aspx?player=Forgiver2">Forgiver2</a> 
'); 
$i = 1; 

while($i < 4) { 
    var_dump($dom->getElementbyId("ctl00_mainContent_rpLeaderboard_ctl0{$i}_hypServiceRecord")->nodeValue); 
    $i++; 
} 

有很多種方式通過解析器去這個問題,我希望這會給你一些不大不小的開始。

0

如何

preg_match_all('~<a[^>]*>([^<]*)</a>~i', $text); 

當然,這只是工作在你給的簡單的例子。對於更復雜的HTML問題,正則表達式不是最好的答案。

編輯:

preg_match_all('~<a id="([^"]*)"[^>]*>([^<]*)</a>~i', $text); 

如果你需要的ID了。