xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
阅读:10111回复: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
pansxw
小狐狸
小狐狸
  • UID10103
  • 注册日期2005-11-27
  • 最后登录2010-05-01
  • 发帖数38
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2006-08-20 04:07
/a(d(((s[-_]|-|_).*/.*\.gi|(s[-_]|-|_).*/.*\.sw)f|s[-_].*/.*\.jpg)|([-_]d.*/.*\.gi|[-_]d.*/.*\.sw)f|-.*-d/.*\.((gi|sw)f|jpg)|_.*_d/.*\.((gi|sw)f|jpg))|(-ad/.*\.(gi|sw)|blog/.*\.(gi|sw)|download.*/.*\.(gi|sw)|ggao/.*\.(gi|sw)|im(g.*/.*(images.*/.*)?\.gi|(age|g).*/.*\.sw)|logo/.*\.(gi|sw)|upload.*/.*\.(gi|sw))f|(a([-_]d|d[-_]).*|-ad)/.*\.jpg|_ads/.*\.((gi|sw)f|jpg)/
ccbbs
千年狐狸
千年狐狸
  • UID3450
  • 注册日期2005-02-28
  • 最后登录2012-08-24
  • 发帖数2857
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2006-08-20 04:07
/*.swf
/*.gif
/*.jpg
这样世界就安静了~

纯属恶搞
 
 
 
zlowly
狐狸大王
狐狸大王
  • UID376
  • 注册日期2004-11-30
  • 最后登录2010-06-18
  • 发帖数385
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2006-08-20 04:07
其实里面的
a_*_d
a-*-d
这样的网址大家见过吗?
而且只屏蔽图片和swf不够吧,最好所有都屏蔽,包括js,html那些。
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
4楼#
发布于:2006-08-20 04:07
pansxw:/a(d(((s[-_]|-|_).*/.*\.gi|(s[-_]|-|_).*/.*\.sw)f|s[-_].*/.*\.jpg)|([-_]d.*/.*\.gi|[-_]d.*/.*\.sw)f|-.*-d/.*\.((gi|sw)f|jpg)|_.*_d/.*\.((gi|sw)f|jpg))|(-ad/.*\.(gi|sw)|blog/.*\.(gi|sw)|download.*/.*\.(gi|sw)|ggao/.*\.(gi|sw)|im(g.*/.*(images.*/.*)?\.gi|(age|g).*/.*\.sw)|logo/.*\.(gi|sw)|upload.*/.*\.(gi|sw))f|(a([-_]d|d[-_]).*|-ad)/.*\.jpg|_ads/.*\.((gi|sw)f|jpg)/回到原帖



这一看就是利用在线优化规则得来的(http://adblock.free.fr/optimize/index.php?lang=en)。效果不好,不是很准确。

不信的话,大家可以到www.okget.com去试试,搜索按钮没了,按钮的地址是http://www.okget.com/img/common/searchbutton.gif

根本不在要过滤的范围内。
ancintosh
狐狸大王
狐狸大王
  • UID11069
  • 注册日期2006-01-11
  • 最后登录2011-08-14
  • 发帖数423
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
5楼#
发布于:2006-08-20 04:07
ccbbs:/*.swf
/*.gif
/*.jpg
这样世界就安静了~

纯属恶搞
回到原帖



不如就一个*号
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
6楼#
发布于:2006-08-20 04:07
实际上我的问题关键就是不想输入了/img\/.*\.gif/ 或是 img/*.gif 而过滤了/img/*/*.gif 或是/img/*/*/*/.gif

如果能修改一下/img\/.*\.gif/  的表达,那么写那些诸多图片的正则式就可以解决了。

请各位多多赐教。

     
leonary
千年狐狸
千年狐狸
  • UID4095
  • 注册日期2005-03-16
  • 最后登录2016-12-24
  • 发帖数1908
  • 经验11枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
7楼#
发布于:2006-08-20 04:07
我觉得,既然是正则表达式,就不应该用*号,用类似[a-zA-Z](\d){4,6} 这样的写法代替之
再狡猾的猎手也斗不过好狐狸
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
8楼#
发布于:2006-08-20 04:07
leonary:我觉得,既然是正则表达式,就不应该用*号,用类似[a-zA-Z](\d){4,6} 这样的写法代替之回到原帖


 
确是不应用 *,但是把它换成 .* 就等价于了任意字符和字符串了,所以我写的是/img\/.*\.gif/
CrossBud
黄金狐狸
黄金狐狸
  • UID7038
  • 注册日期2005-06-29
  • 最后登录2016-08-31
  • 发帖数5948
  • 经验12枚
  • 威望2点
  • 贡献值40点
  • 好评度20点
  • 社区居民
9楼#
发布于:2006-08-20 04:07
lz要的是过滤crsky.com的广告吧
去wiki看吧,我写了的
lococo
火狐狸
火狐狸
  • UID2458
  • 注册日期2005-01-23
  • 最后登录2016-04-07
  • 发帖数100
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2006-08-20 04:07
我喜欢拆开来,比较清爽
/(ggao|logo|blog)\/.*\.(gif|swf)/

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

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

有没有效果就不知道了~
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

先收下了,谢谢了。

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


能给个测试页面么?
xyzcheese
火狐狸
火狐狸
  • UID8821
  • 注册日期2005-09-23
  • 最后登录2017-11-15
  • 发帖数104
  • 经验32枚
  • 威望0点
  • 贡献值16点
  • 好评度2点
  • 社区居民
  • 忠实会员
13楼#
发布于: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)/) 暂时还没找到可以测试的网站,因为这些要过滤的内容是我认为可能会出现的,所以就写出来想把它们过滤掉。但是这条规则我没发现错误而且很精炼,应该能有作用。如果有测试的网页也请告诉一声。
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2024-08-29
  • 发帖数9187
  • 经验398枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
14楼#
发布于: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扩展依赖
上一页
游客

返回顶部