我正在编写一个脚本来获取网站上的所有链接,但我想只获取具有特定单词的链接。我有以下脚本,现在我可以获得所有链接,但我不知道如何创建一个regx来搜索我想要的单词:
$url = file_get_contents("http://www.example.es");
preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $url, $todosenlaces);
答案 0 :(得分:2)
如果您的意思是特定的单词锚文本,您可以使用:
/<a.+href=["'](.*)["'].*>(.*(?:test|aa).*)<\/a>/isgmU
<强> Demo 强>
在上面的示例中,找到了锚文本中包含test
或aa
字样的所有锚点。
如果你只想在锚内部使用特定单词的锚点,你可以使用:
/<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。