用于匹配锚标签的php正则表达式

时间:2011-06-10 04:59:56

标签: php

转到此页面的来源:www.songs.pk/indian/7days.html

只有八个以http://link1

开头的链接

例如:<a href="http://link1.songs.pk/song1.php?songid=2792">Tune Mera Naam Liya</a>

我想要一个与

匹配的php正则表达式

http://link1.songs.pk/song1.php?songid=2792

Tune Mera Naam Liya

感谢。

3 个答案:

答案 0 :(得分:3)

您最好使用simplehtmldom之类的内容查找所有链接,然后找到包含相关HTML / href的所有链接。

使用正则表达式解析HTML并不总是最好的解决方案,在您的情况下,我觉得它只会给您带来痛苦。

$href = 'some_href';
$inner_text = 'some text';

$desired_anchors = array();

$html = file_get_html ('your_file_or_url');

// Find all anchors, returns a array of element objects
foreach($html->find('a') as $anchor) {
    if ($a->href = $href && $anchor->innertext == $inner_text) {
        $desired_anchors[] = $anchor;
    }
}

print_r($desired_anchors);

这应该让你开始。

答案 1 :(得分:0)

不要使用正则表达式伙伴! PHP有一个更适合的工具......

$dom = new DOMDocument;

$dom->loadHTML($str);

$matchedAnchors = array();

$anchors = $dom->getElementsByTagName('a');

$match = 'http://link1';

foreach($anchors as $anchor) {

   if ($anchor->hasAttribute('href') AND substr($anchor->getAttribute('href'), 0, strlen($match)) == $match) {
      $matchedAnchors[] = $anchor;
   }

}

答案 2 :(得分:0)

你去吧

preg_match_all('~<a .*href="(http://link1\..*)".*>(.*)</a>~Ui',$str,$match,PREG_SET_ORDER);
print_r($match);