如何使用正则表达式从html标记中提取网址和文本

时间:2014-02-08 10:55:35

标签: php html regex curl

<!-- This Div repeated in HTML with different properties value -->

<div style="position:absolute; overflow:hidden; left:220px; top:785px; width:347px; height:18px; z-index:36">

<!-- Only Unique Thing is This in few pages -->
<a href="http://link.domain.com/?id=123" target="_parent">

<!-- OR in some pages Only Unique Thing is This, ending with mp3 extension -->
<a href="http://domain.com/song-title.mp3" target="_parent">

    <!-- This Div also repeated multiple in HTML -->

    <FONT style="font-size:10pt" color=#000000 face="Tahoma">
        <DIV><B>Harjaiyaan</B> - Nandini Srikar</DIV>
    </FONT>
</a>

</DIV>

我们有非常脏的html标记,它由某些程序或应用程序生成。我们希望从此代码中提取“Urls”以及“Text”。

href中我们使用了两种类型的网址:网址1模式:“http://link.domain.com/id=123”,网址2模式:“http://domain.com/sons-title.mp3

在第一场比赛中,我们是特定的模式但是在第二个网址中我们没有模式只是以“.mp3”扩展名结尾的网址。

是否有一些函数可以从这个模式和文本代码中提取url

注意:没有DOM,有没有办法匹配href以及文本与正则表达式之间? preg_match?

2 个答案:

答案 0 :(得分:2)

使用DOMDocument Class并按此完成。

$dom = new DOMDocument;
$dom->loadHTML($html); //<------- Pass ur HTML source here
foreach ($dom->getElementsByTagName('a') as $tag) {

        echo $tag->getAttribute('href');
        echo $tag->nodeValue; // to get the content in between of tags...

}

答案 1 :(得分:1)

扩展@Shankar Damodaran的回答:

$html = file_get_contents('source.htm');

$dom = new DOMDocument;
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $tag) {

    if (strstr($tag->getAttribute('href'),'?id=') !== false) {
        echo $tag->getAttribute('href') . "<br>\n";
    }

}

然后为MP3做同样的事情:

$html = file_get_contents('source.htm');

$dom = new DOMDocument;
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $tag) {

    if (strstr($tag->getAttribute('href'),'.mp3') !== false) {
        echo $tag->getAttribute('href') . "<br>\n";
    }

}