我正在从谷歌请求网址中找到搜索词。 我正在使用
preg_match("/[q=](.*?)[&]/", $requesturl, $match);
但是当'q'参数是字符串的最后一个参数时它会失败。
所以我需要获取'q ='之后的所有内容,但匹配必须在找到'&'时停止
怎么做?
编辑: 我最终登陆这个以匹配谷歌请求网址: / [?&安培;] Q =([^&安培;] +)/ 因为有时他们有一个以q结尾的参数。比如'aq = 0'
答案 0 :(得分:3)
您需要/q=([^&]+)/
。诀窍是匹配查询中除&
之外的所有内容。
要构建您的查询,这是一个稍微修改过的版本,它将(几乎)完成这一操作,并且它与您拥有的最接近:/q=(.*?)(&|$)/
。它将q=
放在括号内,因为在括号内它将匹配 ,而不是两者一起,最后你需要匹配&
或字符串的结尾($
)。但是,有一些问题:
&
;你不需要它。要解决此问题,您可以使用lookahead查询:(?=&|$)
因此,如果您想要稍微长一点的查询来扩展您的内容,请点击此处:/q=(.*?)(?=&|$)/
答案 1 :(得分:0)
试试这个:
preg_match("/q=([^&]+)/", $requesturl, $match);
一点解释:
[q=]
会搜索 q
或=
,但不会一个接一个地搜索。[&]
。 &
没问题。?
运算符告诉它匹配**前面**字符的 0或1 次出现。[^&]
会告诉它匹配&
的除之外的任何字符。这意味着您将获得所有查询字符串,直到它达到&。