我有幾個代理規則文件的魷魚,並都含有類似的規則:錯誤的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
?
編輯:只是爲了澄清,我沒有寫這些代理規則文件。
只是爲了澄清,我沒有寫這些代理規則文件。我也是,我不明白爲什麼在那裏使用'\。*'! – g4v3
好吧,基本上你只是想測試當前的URL是否來自某個域:'^ [^ \。] * \。stackexchange。*'可能會更好 –
我只知道這些規則是爲了阻止某些網站,但我不知道是誰寫的他們決定阻止關鍵字而不是域。 – g4v3