我想使用PHP正则表达式来匹配包含单词google
的所有链接。我试过这个:
$url = "http://www.google.com";
$html = file_get_contents($url);
preg_match_all('/<a.*(.*?)".*>(.*google.*?)<\/a>/i',$html,$links);
echo '<pre />';
print_r($links); // it should return 2 links 'About Google' & 'Go to Google English'
然而它什么也没有回报。为什么呢?
答案 0 :(得分:4)
最好在这里使用XPath:
$url="http://www.google.com";
$html=file_get_contents($url);
$doc = new DOMDocument;
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$query = "//a[contains(translate(text(), 'GOOGLE', 'google'), 'google')]";
// or just:
// $query = "//a[contains(text(),'Google')]";
$links = $xpath->query($query);
$links
将是您可以迭代的DOMNodeList
。
答案 1 :(得分:1)
您应该使用dom parser,因为对html文档使用正则表达式可能会“容易”出错。 试试这样的事情
//Disable displaying errors
libxml_use_internal_errors(TRUE);
$url="http://www.google.com";
$html=file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($html);
$n=0;
foreach ($doc->getElementsByTagName('a') as $a) {
//check if anchor contains the word 'google' and print it out
if ($a->hasAttribute('href') && strpos($a->getAttribute('href'),'google') ) {
echo "Anchor" . ++$n . ': '. $a->getAttribute('href') . '<br>';
}
}