阅读:10113回复:21
请帮忙写一个准确的正则表达式
我想把一些图片用adblock plus过滤掉,学了半天正则表达式,还是没弄出个满意的精炼和准确的表达式,郁闷。反正就是多是超出内容的范围,把一些根本无关的链接也过滤了,甚至连有些网页的搜索按钮也变没了。
现在只能求助各位高手,请帮我把如下的内容写出个正确的表达式,拜谢了。 (这个在线优化规则的我也用过了: http://adblock.free.fr/optimize/index.php?lang=en 效果不是很好,实际上就是我描述的那些超出范围的错误) 要过滤的图片如下: ggao/*.gif ggao/*.swf upload*/*.swf upload*/*.gif download*/*.gif download*/*.swf a-d*/*.gif a-d*/*.swf a-d*/*.jpg a-d/*.gif a_d*/*.gif a_d*/*.swf a_d*/*.jpg logo/*.gif logo/*.swf blog/*.gif blog/*.swf a_*_d/*.gif a_*_d/*.swf a_*_d/*.jpg a-*-d/*.gif a-*-d/*.swf a-*-d/*.jpg ad-*/*.gif ad-*/*.swf ad-*/*.jpg ad_*/*.gif ad_*/*.swf ad_*/*.jpg ads-*/*.gif ads-*/*.swf ads-*/*.jpg ads_*/*.gif ads_*/*.swf ads_*/*.jpg -ad/*.gif -ad/*.swf -ad/*.jpg -ad/*.gif -ad/*.swf -ad/*.jpg _ads/*.gif _ads/*.swf _ads/*.jpg _ads/*.gif _ads/*.swf _ads/*.jpg img*/*.gif img*/*.swf image*/*.swf img*/*images*/*.gif |
|
1楼#
发布于:2006-08-20 04:07
badboy2003:/ggao|a(\-|_)?d|(b)?log(o)?|im(a)?g/$image,object 高手啊 ![]() ![]() ![]() |
|
2楼#
发布于:2006-08-20 04:07
打开配置文件夹下的adblockplus/patterns.ini,都是像这样的内容:
[Pattern] text=http://206.51.233.62/casino.gif type=filterlist regexp=http\:\/\/206\.51\.233\.62\/casino\.gif shortcut=http://2 disabled=false 怀疑ad+其实是先把filter解析成正则表达式再执行过滤. |
|
|
3楼#
发布于:2006-08-20 04:07
/ggao|a(\-|_)?d|(b)?log(o)?|im(a)?g/$image,object
a_*_d/*.gif a_*_d/*.swf a_*_d/*.jpg a-*-d/*.gif a-*-d/*.swf a-*-d/*.jpg 这些容易误杀又没多少网站会这样用,最好自己专门针对网站设置规则 |
|
|
4楼#
发布于:2006-08-20 04:07
第一条说明如下:
/(ggao|logo|blog)\/.*\.(gif|swf)/ 这一条不能加img,img的过滤是第二条。 第二条修正如下: /((up|down)load|img|image)[^\/]*\/[^\/]*\.(gif|swf)/ 原来的规则的确有问题,呵呵。查了一下资料才发现,原来排除某符号,应采用中括号[]而非小括号(),原谅我的错误。 不过许多网站的图片都会放在img和image里面,所以第二条不建议使用。或者前面加上网站的限制。 |
|
5楼#
发布于:2006-08-20 04:07
|
|
|
6楼#
发布于:2006-08-20 04:07
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2006-08-20 04:07
正则表达式的优点是准确度,并非速度。
关键字黑名单一般不需要太高准确度,勉强把简单的黑名单合并成复杂的正则表达式就是化简为繁,只会影响效率及速度。 |
|
|
8楼#
发布于:2006-08-20 04:07
关于正则表达式,我一直很迷,但最近看到AdblockPlus上的官方说法后,我觉得可以不用那么吹毛求疵了:
Note: You should not use regular expressions to speed up processing of your filter list. 也就是说,正则表达式除了在外观上简练以外,剩下唯一的好处就是方便网友交流。速度上没有任何优势,楼主把那一堆普通Filters载入到ABplus反而更实用。 |
|
|
9楼#
发布于:2006-08-20 04:07
第一条(/(ggao|logo|blog)\/.*\.(gif|swf)/) 可以到http://www.okget.com/Soft/Soft_1307.htm测试,对logo起作用,该条规则可以用。但是如果再加一个img放到规则里,即/(ggao|logo|blog|img)\/.*\.(gif|swf)/,会发现规则过滤的范围扩大了,在网页(<!-- w --><a class="postlink" href="http://www.okget.com">www.okget.com</a><!-- w -->)上它把搜索按钮(http://www.okget.com/img/common/searchbutton.gif)也过滤了。也就是说 /(ggao|logo|blog)\/.*\.(gif|swf)/ 能把 /ggao/somewords/somepic.gif 也过滤掉了,而需要的则是要过滤/ggao/somepic.gif。
第二条(/((up|down)load|img|image)(^\/)*\/(^\/)*\.(gif|swf)/) 可以到www.rising.com.cn测试。瑞星首页下面有flash (http://www.rising.com.cn/img06/365zhaopin.swf),规则未能过滤掉。即便把规则改成 /((up|down)load|image|img06)(^\/)*\/(^\/)*\.(gif|swf)/ ,也仍然不能过滤。所以此条规则写的有问题。 第三条(/(_)?a((-|_).*(-|_)?)?d(s)?(-|_)?.*\/.*\.(gif|swf|jpg)/) 暂时还没找到可以测试的网站,因为这些要过滤的内容是我认为可能会出现的,所以就写出来想把它们过滤掉。但是这条规则我没发现错误而且很精炼,应该能有作用。如果有测试的网页也请告诉一声。 |
|
10楼#
发布于:2006-08-20 04:07
能给个测试页面么? |
|
11楼#
发布于:2006-08-20 04:07
|
|
12楼#
发布于:2006-08-20 04:07
我喜欢拆开来,比较清爽
/(ggao|logo|blog)\/.*\.(gif|swf)/ /((up|down)load|img|image)(^\/)*\/(^\/)*\.(gif|swf)/ /(_)?a((-|_).*(-|_)?)?d(s)?(-|_)?.*\/.*\.(gif|swf|jpg)/ 有没有效果就不知道了~ |
|
13楼#
发布于:2006-08-20 04:07
lz要的是过滤crsky.com的广告吧
去wiki看吧,我写了的 |
|
14楼#
发布于:2006-08-20 04:07
|
|
上一页
下一页