1

我正在使用 cURL 来获取 Google 中某个搜索的结果数。

我使用preg_match来提取这样的数据:

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

像这样:

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

但是,对于少于 10 个结果,我在数字前没有文本字符串,所以我不知道如何解析它。

Google 呈现的 HTML 输出如下所示:

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

在此示例中,我如何将6提取为整数

注意:我暂时不想使用Google Search API

4

1 回答 1

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,]+表示其中的 1 个或多个。

于 2012-11-15T12:15:33.120 回答