※ 引述《knives ()》之銘言:
: 我用Firefox中的adblock,裡面已經有內建的正規表示法
: 可是其中有一個語法有缺點,會讓Google搜尋壞掉
: /[\W_]ad(?!=&)(banner|click|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|trix|xchange|wrapper)?s?[\W\d_]/
: ^^問題出在這裡
: 如果打某些中文字去搜尋Google,Google會把中文關鍵字轉成%AD% 這種方式
: 但是這樣的話會讓adblock誤判這是廣告網址
: 我把它修改成這樣
: /[\W_]{1}ad[\W_]{1}(?!=&)(banner|click|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|trix|xchange|wrapper)?s?[\W\d_]/
: 在ad兩邊加上[\W_]{1}
: 不知道這樣做能不能達到這支正規表示法的原來的效果
很奇怪
第一,中文字在內部以兩個(big5固定兩個)或多個8-bit字元來表示
轉成url又會把這些字元換成16進位
所以你看到的是...%A2%AD%A6%C0...這樣長長串列中的一部份
針對%AD來改寫regex就好了,不是對準%AD%
不然%AD在字尾怎麼辦?
第二,寫{1}跟沒寫一樣,畫蛇添足
第三,這個regex應該是match的就擋掉吧?
\W意思是除 A-Z, a-z, 0-9, _ 外所有的字元
[\W_]就是以上的組合再加上底線,相當於 [^A-Za-z0-9]
這當中當然包括 %
那你現在寫[\W_]ad[\W_],一樣會match到%AD%,一樣被擋掉,有什麼用
我來寫會這樣寫
[^A-Za-z0-9_%]ad(?!=&) ...
排除 ( ad 前帶 ( 字母 | 數字 | _ | % ),或者後面有跟 & ) 的。後面照舊。
--
BATCH 03 : 買張床 - 切達大俠 - 伐木人之歌 - http://tinyurl.com/3zpyx5
[B4準備中]: 謳歌金錢(7/02) - 單車超人(7/23) - http://tinyurl.com/66v6vq
[ 番外篇 ]: 包租婆也有過當羅莉的時候(7/17) - http://tinyurl.com/6j4ale
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
■ 蒙帝派松正體中文計畫 ■ Spam-a-lot and enjoy the pythonesque delight!
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ http://www.youtube.com/user/JamesBondXD▄▄
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.62.153