PHP分隔符与爆炸多个

时间:2012-09-25 06:59:12

标签: php explode

我正在编写一个简单的“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创建一个数组,除了所需的结果外,它会过滤掉所有内容:即“blogging + for + answers”。文本文件包含大量垃圾,我只想在每个?q=&符号之间保留结果。

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

即。 $q[0] = "blogging+for+answers"
每次我使用仅?q=进行展开时,它会将整个文本提升到?q=的下一次出现,我只需要它直到&

3 个答案:

答案 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

相关问题