簡體   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