0

この質問は何度も聞かれましたが、私のニーズに合った有効な解決策が見つかりませんでした。

Google Ajax API の出力で URL を確認する関数を作成しました: https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=site%3Awww.bierdopje.com %2Fusers%2F+%22Gebruikersprofiel+van+%22+Stevo

出力から「プロファイル」という単語を除外したい。文字列にその単語が含まれている場合は、文字列全体をスキップします。

これは私がこれまでに作成した関数です:

function getUrls($data)
{
    $regex = '/https?\:\/\/www.bierdopje.com[^\" ]+/i';
    preg_match_all($regex, $data, $matches);
    return ($matches[0]);
}

$urls = getUrls($data);
$filteredurls = array_unique($urls);

正確な意味を明確にするためにサンプルを作成しました:
http://rubular.com/r/1U9YfxdQoU

サンプルでは、​​上の 2 つの弦だけが必要な 4 つの弦が選択されていることがわかります。どうすればこれを達成できますか?

4

2 に答える 2

1

JSON データの解析に正規表現を使用しないでください。やりたいことは、JSON を解析し、それをループして、正しい一致する要素を見つけることです。

サンプルコード:

$input = file_get_contents('https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=site%3Awww.bierdopje.com%2Fusers%2F+%22Gebruikersprofiel+van+%22+Stevo');
$parsed = json_decode($input);

$cnt = 0;
foreach($parsed->responseData->results as $response)
{
   // Skip strings with 'profile' in there
   if(strpos($response->url, 'profile') !== false)
       continue;

   echo "Result ".++$cnt."\n\n";
   echo 'URL: '.$response->url."\n";
   echo 'Shown: '.$response->visibleUrl."\n";
   echo 'Cache: '.$response->cacheUrl."\n\n\n";
}

Sample on CodePad(外部ファイルの読み込みをサポートしていないため、文字列はそこでインライン化されています)

于 2013-05-30T12:48:24.323 に答える
1
function getUrls($data)
{
    $regex = '@"(https?://www\\.bierdopje\\.com[^"]*+(?<!/profile))"@';
    return preg_match_all($regex, $data, $matches) ?
        array_unique($matches[1]) : array();
}

$urls = getUrls($data);

結果: http://ideone.com/dblvpA

vs json_decode: http://ideone.com/O8ZixJ

ただし、一般的には を使用する必要がありますjson_decode

于 2013-05-30T12:51:14.117 に答える