2016-07-07 58 views
0

我有幾個代理規則文件的魷魚,並都含有類似的規則:錯誤的Squid代理正則表達式? 。→^ *計算器 *

acl blacklisted dstdom_regex ^.*facebook\.* ^.*youtube\.* ^.*games.yahoo.com\.* 

對域名的模式匹配:dstdom_regex意味着destination (server) regular expression pattern matching

目的是阻止一些網站,但我不通過什麼方法知道:域名,在域名的關鍵字,...

讓我們擴展/描述模式:

^.*stackexchange\.*  The whole pattern 
^      String beginning 
.*      Match anything (greedy quantifier, I presume) 
    stackexchange  Keyword to match 
       \.*  Any number of dots (.) 

完全合法比賽:

  • stackexchange.com:堆棧交易所網站。
  • stackoverflow.stackexchange:想象中的堆棧交換gTLD。

但這些可能的匹配,使它看起來更像是一個關鍵字塊:

  • stackexchange
  • stackexchanger
  • notstackexchange
  • not-stackexchange
  • some-website.stackexchange
  • some-website.stackexchange-tld

和模式似乎包含一個錯誤,因爲它允許以下無效的情況相匹配,由於\.*末,儘管他們從來沒有自然出現:

  • stackexchange.
  • stackexchange...
  • stackexchange..........
  • stackexchange.......com
  • stackexchange.com
  • stackexchangecom
  • 你明白了。

stackexchange,即使從其他一切點分隔的任何東西,仍然是一個有效匹配。


所以,現在,這個問題本身:

這一切都意味着,這簡直是stackexchange匹配! (我假設原作者並不打算匹配無限點)。

那麼,爲什麼不使用模式stackexchange?除了「bug」(\.*)之外,它會不會更快,並且會得到相同的結果?

即,不是^.*stackexchange相當於stackexchange


編輯:只是爲了澄清,我沒有寫這些代理規則文件。

回答

0

我不明白爲什麼你用\.*匹配下面所有的點

然而繞過你的問題,你可以試試這個:

  • ^[^\.]*\.stackexchange\.*

[^\.]*匹配任何東西除了點 \.然後你匹配點

編輯:格式

+0

只是爲了澄清,我沒有寫這些代理規則文件。我也是,我不明白爲什麼在那裏使用'\。*'! – g4v3

+0

好吧,基本上你只是想測試當前的URL是否來自某個域:'^ [^ \。] * \。stackexchange。*'可能會更好 –

+0

我只知道這些規則是爲了阻止某些網站,但我不知道是誰寫的他們決定阻止關鍵字而不是域。 – g4v3