获取某些链接的href属性和文本

时间:2014-04-26 02:00:50

标签: php html regex

这四个链接:

<img border="0" src="imagenes/flech.gif" width="6" height="8">

<a href="escuchar-baladas-de-Albano_Y_Romina_Power.html">Albano Y Romina Power</a><br>
<img border="0" src="imagenes/flech.gif" width="6" height="8">

<a href="escuchar-baladas-de-Armando_Manzanero.html">Armando Manzanero</a><br>

<a name="inicio21" href="musica-Merengue-de-Banda_Cuisillos.html">
<img border="0" src="imagenes/flech.gif" width="6" height="8">Banda Cuisillos</a><br>

<a href="Musica-Baladas-Alternativas.html">Baladas Alternativas</a><br>

我正在尝试捕获href值和三个链接的文本,排除第四个链接,换句话说我正试图得到这个:

escuchar-baladas-de-Albano_Y_Romina_Power.html    Albano Y Romina Power
escuchar-baladas-de-Armando_Manzanero.html    Armando Manzanero
musica-Merengue-de-Banda_Cuisillos.html    Banda Cuisillos

我试图充分利用这三个第一个拥有imagenes/flech.gif的事实,这样就省去了第四个,imagenes/flech.gif不是同一个顺序的事情。 Here是我尝试解决问题的方法,我可以在href中找到它,但包括第四个。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

你应该使用html解析器而不是正则表达式,试试这个:

<?php

$html = <<< EOF
<img border="0" src="imagenes/flech.gif" width="6" height="8">

<a href="escuchar-baladas-de-Albano_Y_Romina_Power.html">Albano Y Romina Power</a><br>
<img border="0" src="imagenes/flech.gif" width="6" height="8">

<a href="escuchar-baladas-de-Armando_Manzanero.html">Armando Manzanero</a><br>

<a name="inicio21" href="musica-Merengue-de-Banda_Cuisillos.html">
<img border="0" src="imagenes/flech.gif" width="6" height="8">Banda Cuisillos</a><br>

<a href="Musica-Baladas-Alternativas.html">Baladas Alternativas</a><br>
EOF;


$dom = new DOMDocument();
@$dom->loadHTML($html);

# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('a') as $link) {

    $url =  $link->getAttribute('href');
    $text = preg_replace('/[\r\n]/sm', '', $link->nodeValue); // remove line breaks

    //if doesn't contain the banned words...
    if (!preg_match('/(Baladas Alternativas|another text to filter)/sm', $text)) {
        echo $url ." ".$text. "\n";
    } 

}
?>

<强> 样本
http://ideone.com/5QX83x

<强> 资源
http://htmlparsing.com/php.html

答案 1 :(得分:0)

此代码将获得前3个链接

$a='<img border="0" src="imagenes/flech.gif" width="6" height="8"><a href="escuchar-baladas-de-Albano_Y_Romina_Power.html">Albano Y Romina Power</a><br><img border="0" src="imagenes/flech.gif" width="6" height="8"><a href="escuchar-baladas-de-Armando_Manzanero.html">Armando Manzanero</a><br><a name="inicio21" href="musica-Merengue-de-Banda_Cuisillos.html"><img border="0" src="imagenes/flech.gif" width="6" height="8">Banda Cuisillos</a><br><a href="Musica-Baladas-Alternativas.html">Baladas Alternativas</a><br>';

preg_match_all('/<a.*?href="(.+?)">(?:<img.*\d+">)?(.+?)<\/a>/',$a,$match);


echo $match[1][0] . "  " . $match[2][0]."<br>";
echo $match[1][1] . "  " . $match[2][1]."<br>";
echo $match[1][2] . "  " . $match[2][2]."<br>";