id属性更改为1的preg匹配

时间:2011-02-24 00:25:35

标签: php

我想获得每个锚的innertext。然后打印结果。 id属性中的“ctl”每次增加01。

我必须通过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>

2 个答案:

答案 0 :(得分: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++;
}

通过解析器有很多方法可以解决这个问题,我希望这会给你一些启动。

答案 1 :(得分:0)

怎么样

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

当然,这只是你给出的简单例子。对于更复杂的html问题,正则表达式不是最好的答案。

编辑:

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

如果你也需要id。