PHP 分隔符与爆炸倍数

  • 本文关键字:分隔符 PHP 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 创建一个数组,它过滤掉除所需结果之外的所有内容:即"博客+for+答案"。文本文件包含很多垃圾,我只想保留每个?q=&符号之间的结果。

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


$q[0] = "blogging+for+answers"每次我只使用爆炸?q=它都会占用整个文本直到下一次出现?q=,我只希望它直到&

使用 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'];
?>

尝试parse_url() .

以下是相同的代码:

<?php
    $url = 'http://username:password@hostname/path?arg=value#anchor';
    print_r(parse_url($url));
    echo parse_url($url, PHP_URL_PATH);
?>

这将为您提供如上所述的数组$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