繁体   English   中英

匹配URL中的google searchterms的PHP正则表达式问题

[英]php regex question for matching google searchterms in url

即时通讯从谷歌的请求URL中找到搜索词。 我正在使用

preg_match("/[q=](.*?)[&]/", $requesturl, $match);

但是当“ q”参数是字符串的最后一个参数时,它将失败。

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

怎么做?

编辑:我最终为匹配Google请求的网址而着陆:/ [?&] q =([^&] +)/因为有时它们的参数以q结尾。 就像“ aq = 0”

您需要/q=([^&]+)/ 诀窍是匹配查询中&以外的所有内容。

为了构建您的查询,这是一个经过稍加修改的版本,几乎可以完成所有操作,并且与您所拥有的版本最接近:/ /q=(.*?)(&|$)/ .*?)(&| /q=(.*?)(&|$)/ 它把q=出来的括号之内,因为这将匹配他们的,而不是两者一起的括号内,并在结束时,你需要匹配要么&或字符串(结束$ )。 但是,这有一些问题:

  1. 有时您会在比赛结束时获得额外的& 你不需要它。 要解决此问题,您可以使用前瞻查询: (?=&|$)
  2. 它在末尾引入了一个额外的组(不一定很糟,但是可以避免)-实际上,这是由1固定的。

因此,如果您希望稍长一点的查询来扩展那里的内容,则为:/ /q=(.*?)(?=&|$)/ (?= /q=(.*?)(?=&|$)/

尝试这个:

preg_match("/q=([^&]+)/", $requesturl, $match);

一些解释:

  • [q=]将搜索要么 q= ,但经过另一个不是一个。
  • 不需要[&] ,因为只有一个字符。 &很好。
  • ? 正则表达式中的运算符告诉它匹配0或1次出现的**前面**字符。
  • [^&]会告诉它匹配& 以外的任何字符。 这意味着您将获得所有查询字符串,直到命中&为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM