1

我正在编写一个简单的“httpref”程序,它将搜索引擎响应捕获到一个大文本文件中。例如,日志文件包含大量数据,并且每隔一段时间就会出现一个以 :?q=结尾的位置&

http://www.bing.com/search?q=blogging+for+answers&qs=n&form=QBRE&pq=blogging+for+answers&sc=8-18&sp=-1&sk=

我想做的是使用explode 创建一个数组,它会过滤掉除所需结果之外的所有内容:即“博客+for+answers”。文本文件包含很多垃圾,我只想在每个?q=&符号之间保留结果。

据我所见,没有一个简单的解析器可以从 URL 字符串中提取参数数据。

$q[0] = "blogging+for+answers"
每次我使用explode with 时,?q=它只需要整个文本直到下一次出现?q=,我只希望它直到&

4

3 回答 3

4

用于parse_url获取查询字符串组件以及parse_str提取所需的查询字符串变量。

<? 
$url = "http://www.bing.com/search?q=blogging+for+answers&qs=n&form=QBRE&pq=blogging+for+answers&sc=8-18&sp=-1&sk=";
$querystring = parse_url($url,PHP_URL_QUERY);
parse_str($querystring,$arr);
echo $arr['q'];
?>
于 2012-09-25T07:21:08.453 回答
1

试试parse_url()

以下是相同的代码:

<?php
    $url = 'http://username:password@hostname/path?arg=value#anchor';
    print_r(parse_url($url));
    echo parse_url($url, PHP_URL_PATH);
?>
于 2012-09-25T07:16:34.337 回答
0

如上所述,这将为您提供 $q 作为数组。

$file = file_get_contents($filename);
preg_match_all("/http[^'\" ]*[?][^'\" ]*[&]q[=]([^'\"& ]*)/",$file ,$matches);

foreach($matches as $match)
     $q[] = $match[1];

编辑

解释这个表达式的作用。这将找到每次出现的情况http*****?****&q=(result)[&'" ],然后将 $matches 作为每次出现的数组返回。该表达式还检查没有空格或引号,然后它不会添加到 $matches

于 2012-09-25T07:29:53.753 回答