作者MOONRAKER (㊣高斯冗谈消去法)
看板Programming
标题Re: [问题] 这个正规表示法这样修改可以吗
时间Sat Feb 7 00:51:22 2009
※ 引述《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!
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ https://www.youtube.com/user/JamesBondXD▄▄
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.217.62.153