用于在url中匹配google searchterms的php正则表达式问题

用于在url中匹配google searchterms的php正则表达式问题,php,regex,Php,Regex,我从谷歌请求URL中查找搜索词。 我正在使用 但是当'q'参数是字符串的最后一个参数时,它会失败 因此,我需要获取“q=”之后的所有内容,但如果找到“&”,则必须停止匹配 怎么做 编辑: 我最终找到了这个匹配谷歌请求url的网站: /[?&]q=([^&]+)/ 因为有时候他们有一个以q结尾的参数。像'aq=0'试试这个: preg_match("/q=([^&]+)/", $requesturl, $match); 稍微解释一下: [q=]将搜索或

我从谷歌请求URL中查找搜索词。 我正在使用

但是当'q'参数是字符串的最后一个参数时,它会失败

因此,我需要获取“q=”之后的所有内容,但如果找到“&”,则必须停止匹配

怎么做

编辑: 我最终找到了这个匹配谷歌请求url的网站: /[?&]q=([^&]+)/ 因为有时候他们有一个以q结尾的参数。像'aq=0'

试试这个:

preg_match("/q=([^&]+)/", $requesturl, $match);
稍微解释一下:

  • [q=]
    将搜索
    =
    ,但不是一个接一个地搜索
  • [&]
    不需要,因为只有一个字符<代码>&
    可以
  • 正则表达式中的
    操作符告诉它匹配**前面**字符的0或1次出现
  • [^&]
    将告诉它匹配除
    &
    之外的任何字符。这意味着您将获得所有查询字符串,直到它命中&
您需要
/q=([^&]+)/
。诀窍是匹配查询中除
之外的所有内容。

在您的查询的基础上,这是一个稍加修改的版本,它(几乎)可以做到这一点,而且它与您的查询最为接近:
/q=(*?)(&|$)/
。它将
q=
放在括号外,因为在括号内,它将匹配其中一个,而不是两个,并且在末尾,您需要匹配
&
或字符串的结尾(
$
)。不过,这方面存在一些问题:

  • 有时比赛结束时你会有一个额外的
    &
    ;你不需要它。要解决此问题,可以使用以下查询:
    (?=&&|$)
  • 它在最后引入了一个额外的组(不一定是坏的,但可以避免)——实际上,这是由1修正的

  • 因此,如果您想要一个稍微长一点的查询来扩展已有的内容,那么它就是:
    /q=(.*)(=&$)/

    +1在我有机会纠正我的错误之前发布正确的一个:)它与我的不匹配:/这里是一个它应该匹配的字符串:
    http://www.google.no/url?sa=t&source=web&cd=3&sqi=2&ved=0CHMQFjAC&url=http%3A%2F%2Fwww.iphonedeksler.no%2Fiphone-4-deksel%2F&rct=j&q=deksel%20til%20iphone%204&ei=eMVOTpDfBI7DtAaA4cTLBw&usg=AFQJCNEJ2ZQJDBEUW4DCGETPR0Z3Z18NA和另一个它应该匹配的:
    http://www.google.no/url?sa=t&source=web&cd=3&sqi=2&ved=0CHMQFjAC&url=http%3A%2F%2Fwww.iphonedeksler.no%2Fiphone-4-deksel%2F&rct=j&ei=eMVOTpDfBI7DtAaA4cTLBw&usg=AFQJCNEJ2ZQJDBEUW4DCETEPR0Z3Z18NA&q=deksel%20til%20iphone%204
    。。但到目前为止,这个线程中的所有内容都不匹配。@Kristian Rafteseth奇怪,它在我的正则表达式中工作。它应该和preg_match一起使用,我会在代码板中尝试。奇怪的事情。它在代码板中给了我一个错误,但在ideone中工作:天哪,对不起,我在代码的其他地方查到了。非常感谢你的正确答案。
    preg_match("/q=([^&]+)/", $requesturl, $match);