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 に答える