2012-11-15 28 views
1

我使用cURL來獲取Google中特定搜索的結果數量。PHP:使用preg_match(非Google API)提取Google中索引頁面的數量

我用的preg_match提取這樣的數據:

preg_match('/About (.*?) results/sim',$google_url_contents, $regs) 

像這樣:

preg_match('/Results .*? of about (.*?) from/sim', $google_url_contents, $regs) 

然而,不到10個結果我沒有文本字符串之前的數字爲,所以我不知道如何解析它。

由谷歌提供的HTML輸出如下:

<div id="resultStats">6 results<nobr> (0.11 seconds)&nbsp;</nobr></div> 

在這個例子中,我怎麼能提取爲整數

備註:我暫時不想使用Google搜索API

+0

你可以給出一個搜索結果少於10的例子嗎?附:使用RegEx來解析HTML就像是在這裏的恥辱。 \ d適用於任何數字。 \ d +用於一個或多個數字。 [0-9] +是0到9之間的任意數字中的一個或多個。也就是說,您可以使用'/ \ d + results /' – Steve

+0

我知道RegEx不受歡迎...這裏是一個使用少於10個結果:'http://www.google.com/#q=site:wwwyogamesana.com' – emman

回答

2

您可以使用preg_match('/resultStats\D*([\d,]+)/', $line, $matches)

function get_number_of_results($line) { 
    if (preg_match('/resultStats\D*([\d,]+)/', $line, $matches)) { 
     echo "$matches[1]\n"; # for debug only 
     $value = (int) str_replace(',', '', $matches[1]); 
     return $value; 
    } 
    return -1; 
} 

$line = '<div id="resultStats">6 results<nobr> (0.11 seconds)&nbsp;</nobr></div>'; 
var_dump(get_number_of_results($line)); 

$line = '<div id="resultStats">About 6,100,000 results<nobr> (0.11 seconds)&nbsp;</nobr></div>'; 
var_dump(get_number_of_results($line)); 

輸出:

6 
int(6) 
6,100,000 
int(6100000) 

\D指非數字字符。 \D*是0或更多的非數字字符。 [\d,]是一個數字或逗號的字符類,[\d,]+表示其中一個或多個。

相關問題