xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
阅读:10113回复:21

请帮忙写一个准确的正则表达式

楼主#
更多 发布于:2006-08-20 04:07
我想把一些图片用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
unknow
小狐狸
小狐狸
  • UID14514
  • 注册日期2006-09-09
  • 最后登录2006-09-09
  • 发帖数2
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2006-08-20 04:07
badboy2003/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
这些容易误杀又没多少网站会这样用,最好自己专门针对网站设置规则
回到原帖

高手啊 可以发我一份广告规则  
Jacky-Q
千年狐狸
千年狐狸
  • UID6896
  • 注册日期2005-06-20
  • 最后登录2012-07-23
  • 发帖数1076
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
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解析成正则表达式再执行过滤.
为了节省精力,再也不去理会发帖数少于10的人提的问题了.
badboy2003
小狐狸
小狐狸
  • UID7489
  • 注册日期2005-07-21
  • 最后登录2009-06-16
  • 发帖数42
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
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
这些容易误杀又没多少网站会这样用,最好自己专门针对网站设置规则
[Adblock Plus 0.7.1]
$object
$script,third-party
/[^lo|re]ad/$~stylesheet
lococo
火狐狸
火狐狸
  • UID2458
  • 注册日期2005-01-23
  • 最后登录2016-04-07
  • 发帖数100
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2006-08-20 04:07
第一条说明如下:
/(ggao|logo|blog)\/.*\.(gif|swf)/
这一条不能加img,img的过滤是第二条。

第二条修正如下:
/((up|down)load|img|image)[^\/]*\/[^\/]*\.(gif|swf)/

原来的规则的确有问题,呵呵。查了一下资料才发现,原来排除某符号,应采用中括号[]而非小括号(),原谅我的错误。

不过许多网站的图片都会放在img和image里面,所以第二条不建议使用。或者前面加上网站的限制。
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2024-08-29
  • 发帖数9187
  • 经验398枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
5楼#
发布于:2006-08-20 04:07
三翻领:正则表达式是最头痛的一块,还有面向对象的思想。
有人说正则不是纯粹的一种工具,而是一种语言,一点都不错
回到原帖


就是一种语言,Jave和Perl里都有的。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
三翻领
禁止发言
禁止发言
  • UID6501
  • 注册日期2005-06-02
  • 最后登录2017-11-30
  • 发帖数2796
  • 经验-5234枚
  • 威望0点
  • 贡献值-10494点
  • 好评度-5257点
6楼#
发布于:2006-08-20 04:07
用户被禁言,该主题自动屏蔽!
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
7楼#
发布于:2006-08-20 04:07
正则表达式的优点是准确度,并非速度。

关键字黑名单一般不需要太高准确度,勉强把简单的黑名单合并成复杂的正则表达式就是化简为繁,只会影响效率及速度。



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2024-08-29
  • 发帖数9187
  • 经验398枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
8楼#
发布于:2006-08-20 04:07
关于正则表达式,我一直很迷,但最近看到AdblockPlus上的官方说法后,我觉得可以不用那么吹毛求疵了:
Note: You should not use regular expressions to speed up processing of your filter list.
You might hear this advice often but it is outdated
starting with Adblock Plus 0.7
basic filters are actually processed faster than regular expressions.


也就是说,正则表达式除了在外观上简练以外,剩下唯一的好处就是方便网友交流。速度上没有任何优势,楼主把那一堆普通Filters载入到ABplus反而更实用。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
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)/) 暂时还没找到可以测试的网站,因为这些要过滤的内容是我认为可能会出现的,所以就写出来想把它们过滤掉。但是这条规则我没发现错误而且很精炼,应该能有作用。如果有测试的网页也请告诉一声。
lococo
火狐狸
火狐狸
  • UID2458
  • 注册日期2005-01-23
  • 最后登录2016-04-07
  • 发帖数100
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2006-08-20 04:07

先收下了,谢谢了。

研究了一下:
第一条问题不大,可以过滤/logo/*.gif,但是超出范围。比如:/logo/*/m.gif也被过滤了。
第二条有问题,无法过滤
第三条有点复杂,研究中。


能给个测试页面么?
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
11楼#
发布于:2006-08-20 04:07
lococo:我喜欢拆开来,比较清爽
/(ggao|logo|blog)\/.*\.(gif|swf)/

/((up|down)load|img|image)(^\/)*\/(^\/)*\.(gif|swf)/

/(_)?a((-|_).*(-|_)?)?d(s)?(-|_)?.*\/.*\.(gif|swf|jpg)/

有没有效果就不知道了~
回到原帖


先收下了,谢谢了。

研究了一下:
第一条问题不大,可以过滤/logo/*.gif,但是超出范围。比如:/logo/*/m.gif也被过滤了。
第二条有问题,无法过滤
第三条有点复杂,研究中。
lococo
火狐狸
火狐狸
  • UID2458
  • 注册日期2005-01-23
  • 最后登录2016-04-07
  • 发帖数100
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
12楼#
发布于:2006-08-20 04:07
我喜欢拆开来,比较清爽
/(ggao|logo|blog)\/.*\.(gif|swf)/

/((up|down)load|img|image)(^\/)*\/(^\/)*\.(gif|swf)/

/(_)?a((-|_).*(-|_)?)?d(s)?(-|_)?.*\/.*\.(gif|swf|jpg)/

有没有效果就不知道了~
CrossBud
黄金狐狸
黄金狐狸
  • UID7038
  • 注册日期2005-06-29
  • 最后登录2016-08-31
  • 发帖数5948
  • 经验12枚
  • 威望2点
  • 贡献值40点
  • 好评度20点
  • 社区居民
13楼#
发布于:2006-08-20 04:07
lz要的是过滤crsky.com的广告吧
去wiki看吧,我写了的
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
14楼#
发布于:2006-08-20 04:07
leonary:我觉得,既然是正则表达式,就不应该用*号,用类似[a-zA-Z](\d){4,6} 这样的写法代替之回到原帖


 
确是不应用 *,但是把它换成 .* 就等价于了任意字符和字符串了,所以我写的是/img\/.*\.gif/
上一页
游客

返回顶部