簡體   English   中英

用於檢測特定查詢的正則表達式

[英]Regular Expression to Detect a Specific Query

我想知道是否有人可以構造一個正則表達式來檢測某人是否搜索“ site:cnn.com”或“ site:www.globe.com.ph/”之類的東西。 我一直在最困難的時間來解決它。 在此先多謝!

編輯:抱歉忘了提及我的腳本在PHP中。

好的,要輸入任意文本字段,可以使用以下簡單的方法:

\bsite:(\S+)

括號將捕獲他們嘗試搜索的任何站點/域。 它不會驗證它是有效的,但驗證網址/域名是復雜的,有許多容易googlable正則表達式做這件事,例如,有一個在這里

您要匹配什么? 引薦來源網址?

假設您要匹配如下所示的引薦來源網址:

http://www.google.com/search?client=safari&rls=en-us&q=whatever+site:foo.com&ie=UTF-8&oe=UTF-8

這樣的正則表達式可以解決問題:

\bsite(?:\:|%3[aA])(?:(?!(?:%20|\+|&|$)).)+

筆記:

  • “站點”之后的冒號可以是未編碼的,也可以是百分比編碼的。 大多數用戶代理會將其保留為未編碼的狀態(我認為這實際上與標准相反),但這將同時處理兩個
  • 我假設該站點:... url將由空格字符,字段結尾(&)或字符串結尾($)的右邊界
  • 我沒有假設x-www-form-urlencoded編碼(空格=='+')或使用百分比編碼進行編碼的空格(空格==%20)。 這將同時處理
  • (?:...)是一個非捕獲組。 (?!...)是否定的前瞻。

不,這不是引薦來源網址。 我的PHP腳本基本上吐出了有關域的信息(例如,反向鏈接,pagerank等),我需要該正則表達式,以便它知道用戶在搜索什么。 如果用戶輸入的內容與正則表達式不匹配,則會進行常規的網絡搜索。

如果這是您要嘗試的全部操作,那么我想我會采用更簡單的方法,然后執行以下操作:

$entry = $_REQUEST['q'];
$tokens = split(':', trim($entry));
if (1 < count($tokens) && strtolower($tokens[0]) == 'site')
  $site = $tokens[1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM