我正在编写一个简单的“httpref”程序,将搜索引擎响应捕获到一个大文本文件中。例如,日志文件包含大量数据,每隔一段时间就有一个?q=
,其中&
终止:
我想要做的是使用explode创建一个数组,除了所需的结果外,它会过滤掉所有内容:即“blogging + for + answers”。文本文件包含大量垃圾,我只想在每个?q=
和&
符号之间保留结果。
从我所看到的,没有一个简单的解析器从URL字符串中提取参数数据。
即。 $q[0] = "blogging+for+answers"
每次我使用仅?q=
进行展开时,它会将整个文本提升到?q=
的下一次出现,我只需要它直到&
答案 0 :(得分: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'];
?>
答案 1 :(得分: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);
?>
答案 2 :(得分: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