正则表达式匹配包含“Google”的链接

时间:2011-03-06 10:16:58

标签: regex

我想使用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'

然而它什么也没有回报。为什么呢?

2 个答案:

答案 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>';
    }
}