MozTW 討論區 https://forum.moztw.org/ |
|
請問adblock的過濾條件撰寫 https://forum.moztw.org/viewtopic.php?f=11&t=7303 |
第 1 頁 (共 1 頁) |
發表人: | mphstw [ 2005-03-27, 01:35 ] |
文章主題 : | 請問adblock的過濾條件撰寫 |
請問有相關教學文章 可以看嗎 (台灣版的) 對面的論壇有一篇精華文章 ************************************************************* 我們常見的url無非是:aaa.bbb.ccc/123456789/........htm,gif等等 需要過濾的地址,由抽象到具體來說,往往有以下特點: I.全部過濾一個不漏,只要出現就喀嚓,往往是令人深惡痛絕的url。 例(例子中都是用原始的帶通配符的表達式):*.ad.*; */ad/*; *.3721.*/*或者*3721* II.過濾網址主體,也就是第一個/號之前的所有。 例:www.1000downloads.com/*; www.w163.com/* III.過濾具體到網頁子目錄,進入若干個/號內 例:http://imguv.21cn.com/images/*; http://union.homeway.com.cn/images/* 之所以能這樣,一般是因為一眼看過去就知道這樣的目錄下沒有好東西,或者看到很多條過濾器中都出現如下的結構(也表明了網頁作者的風格類似),如這裡的images IV.過濾具體到文件,一般就是*.gif,*.swf,*.js類的文件了 例:http://images.chinabyte.com/*.swf; http://www.5ud.com/images/*.gif 綜上,只要把問題分開考慮即可: ************************************************************* 1.一段體 創建一個如下的表達式(註:本文的正則表達式如果不帶前後的兩個/號,加入adblock時需加上) (\.|\/)(您的輸入)(\.|\/|_) (感謝zlowly給出這個filter模型) 前後兩個括號中表示的是在你的字段前出現"."或"/",字段後出現".","/"或"_"時候考慮你的字段,沒有這兩個限制的話過濾範圍就過寬了,例:只寫(ad)的話,任何帶有ad二字的url均會被過濾。 例: /(\.|\/)(tomnews|dns99|ad|banner|3721|taobao|unionsky)(s)?(\d)*(\.|\/|_)/ --其中的(s)?是表示s出現0次或1次,則該filter通配ad或者ads,banner或banners,但由於可以出現0次,所以其他成分仍然可以往中間的括號裡加入,即便沒有unionskys,taobaos。 --後面的(\d)*表示0-9之間的數字,*號表示0次或多次。 正如zlowly所說,為的是對抗網站根據日期顯示不同廣告,例如 .../ad20041020/... 然後無非是在中間那個括號中,用|號分開你所有想要匹配的字段了。 知道了這一點,後面的情況就勢如破竹了。 2.二段體 創建一個這樣的表達式雛形: \.()\.() 由於已經具體到網址的主體部分,所以前後的/或者.也就不需再出現了 例: \.(boyis|allyes|cjt1|w163|ppzxw|1000downloads)\.(net|com) 它等價於 http://*.allyes.com/* *.boyis.com* *.cjt1.net* *.w163.com* *.ppzxw.com* *.1000downloads.com* 這樣看來,應該比較清晰了吧? 3.三段體 例: (union|adimg|unstat|ulinkjs)\.(baidu|tom|163|sogou)\.(com) 等價於 *adimg.163.com* *unstat.baidu.com* *ulinkjs.tom.com* *union.sogou.com* 或許有朋友問,為什麼分開三種情況呢?整合到一起去有沒有可能? 一個很自然的想法是用一個"?"號來表示三段體中的第一段或者出現,或者不出現, 例如想要整合admig.163.com和*.boyis.com,這樣寫的話: (adimg)?\.(163|boyis)\.(com) 因為adimg這個字段可出現也可不出現,所以實際上www.163.com這樣的地址自然也會被匹配上了,這可不是我們的初衷, 這也就是為什麼我覺得應該把各種情況分開考慮,當然更期待高手能解決這個問題。 其次,鑑於"|"符號會導致自由組合,整合度不應太高。三段體例子中,第一個括號中最好不要放進通用性太強的字段, 如www,否則"|"符號產生自由組合,若要過濾www.ads8.com和adimage.163.com,自由組合的結果當然www.163.com也被過濾了…… 有鑑於此,鎖定某一段應該是一個不錯的選擇,我看第三段應該鎖定,也就是說裡面沒有「或」符號 例如:結尾為com的全部單獨寫一條,而不要結尾(com|net|org|biz|gov)全加上, 或許會有意想不到的組合的(大家看看whitehouse.com/net/gov就知道了 ) 4.具體到文件的,swf/gif類(如有FlashBlock這個擴展的,可以不需要重複過濾swf) 下面是一條很個人的filter,原則也就是在()\.()\.()\/的基本型後面加上了一個.*\.(gif|swf)的文件類型判斷, 鑑於這個時候網站網址變化很大,這個filter的整合度就不高了,很多都是直接貼進去然後用"|"符號分開而已。 (www\.(mydrivers|btbbt|shd|5ud)\.com(\.cn)?|search(\d)?\.btchina\.net|image\.cgame\.cn|onlinedown\.net|218\.106\.83\.10|down\.20cl\.com)\/(image(s)?|photo)?\/.*\.(gif|swf) 等價於: http://*.onlinedown.net/*.swf http://*.onlinedown.net/images/*.gif http://down.20cl.com/*.gif http://image.cgame.cn/photo/*.gif http://search3.btchina.net/images/*.gif http://www.btbbt.com/*.gif http://www.shd.com.cn/*.gif http://www.mydrivers.com/images/*.gif http://www.mydrivers.com/images/*.swf http://218.106.83.10/images/*.gif ================================================= 寫得不錯..不過我根據上面寫的去做 例如 http://tw.i1.yimg.com/tw.yimg.com/i/tw/hp/0325/pic.jpg 這段我應該可以改成/(\.|\/)(hp)(s)?(\d)*(\.|\/|_)/ 不過卻會擋住在hp下的mh750_v10 上面那一排選項改成這樣/(\.|\/)(hp^mh750_v10)(s)?(\d)*(\.|\/|_)/ 還是不行 |
發表人: | Sheng [ 2005-03-27, 16:24 ] |
文章主題 : | |
你的寫法看起來像是把所有hp帶數字的都鎖住了 跟這樣寫幾乎沒兩樣 /(\.|\/)(hp)(\.|\/|_)/ 個人淺見 |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |