获取包含单词的所有链接

时间:2014-07-31 10:16:15

标签: php regex preg-match pcre scrape

我正在编写一个脚本来获取网站上的所有链接,但我想只获取具有特定单词的链接。我有以下脚本,现在我可以获得所有链接,但我不知道如何创建一个regx来搜索我想要的单词:

$url = file_get_contents("http://www.example.es");
preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $url,    $todosenlaces);

2 个答案:

答案 0 :(得分:2)

如果您的意思是特定的单词锚文本,您可以使用:

/<a.+href=["'](.*)["'].*>(.*(?:test|aa).*)<\/a>/isgmU

<强> Demo

在上面的示例中,找到了锚文本中包含testaa字样的所有锚点。

如果你只想在锚内部使用特定单词的锚点,你可以使用:

/<a[^>]+href=["']([^>]*(?:test|aa)[^>]*)["'][^>]*>(.*)<\/a>/isgmU

<强> Demo

然而,在所有情况下,这些都不会起作用,但为了简单匹配,它们应该起作用。

答案 1 :(得分:0)

做这样的事情:

$html = file_get_contents("http://www.example.es");
$dom = new DOMDocument();
$dom->loadHTML($html);

$results = array();

$tags = $dom->getElementsByTagName('a');
foreach ($tags as $tag) {
       $url = $tag->getAttribute('href');
       if (strpos($url,"apple") !== false){ //"apple" is the word to search for
           $results[] = $url;
       }

       //or search for the word in the hyperlink text 
       if (strpos($tag->nodeValue,"apple") !== false){
           $results[] = $url;
       }
}

$results将包含包含单词apple的所有网址的数组。

正如birdpspider已经指出的那样,使用RegEx搜索链接并不好。解析文档的代码来自:PHP String Manipulation: Extract hrefs