关于广告过滤的正则表达式的格式

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
Post Reply
imsheng
Posts: 37
Joined: Jan 08 2008, 13:24

关于广告过滤的正则表达式的格式

Post by imsheng »

发现这个网站很欣喜。找到组织了!

这个问题在网络上搜索了也没找到合适的答案。
Proxomitron是支持正则表达式的吧。

我在AdList里添加了

Code: Select all

/(bbs9|adpolestar|nihao)\.net/
/(u88|ete|co.jrj.com|pfp.sina.com)\.cn/
类似这样的字符串。但我在地址栏里输入u88.cn,ete.cn,这样的地址也照样通过。

我是用Opera的。虽然Proxomitron是浏览器不相关的。呵呵。
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 关于广告过滤的正则表达式的格式

Post by phoenix »

Proxomitron使用的是正则表达式的变形,即作者在正则表达式的基础上做了一定的改进以更适合广告过滤规则的编写。软件自带的帮助文件介绍得很详细,请仔细体会。

以你的Adlist为例,“.”在Proxomitron的语法里不是元字符,所以并不需要用“\”来转义。开头的“/”可以去掉或依情况改写为“[^/]++.”。以[^/]++.adserver.com为例,它将匹配:

Code: Select all

www.adserver.com
www1.adserver.com
而不匹配:

Code: Select all

www.host.com/adserver.com
至于在地址栏输入是否能通过,要看你的规则的具体写法。
Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

Re: 关于广告过滤的正则表达式的格式

Post by Ray4 »

其实这个文件里就有很多示例的,楼主没看吧 :D
imsheng
Posts: 37
Joined: Jan 08 2008, 13:24

Re: 关于广告过滤的正则表达式的格式

Post by imsheng »

呵呵。有查看过urlfilter.ini开头的那些注释,但没怎么看懂。况且不清楚Proxomitron使用的是变形的正则。

我一般过滤网站都是这样。

*.narrowad.com
*.lianmeng.com
*.eqifa.com
*.adbaaz.com

很明显就是简单的字符串匹配,效率不高,只能一个一个加。下决心搞懂这个正则。

还有,sidki的配置太复杂了。真的出了问题也不知道在哪里改。希望有简要的说明。
imsheng
Posts: 37
Joined: Jan 08 2008, 13:24

Re: 关于广告过滤的正则表达式的格式

Post by imsheng »

我现在把开头的“/”去掉,“\.”改成“.”。

(ete|ez|unionsky|shareware).cn|51.la

这句,“|”前面的匹配生效了,但后面的51.la没生效。“|”这些符号没用的?

类似这些需要怎样修改?
(.|\)(1tong|265|51(ad|.la|yes|link)|alexa|alibaba|ebay|gimg|hotadv?|icast|unicom|itsun|union(sky)?|usmsad)(\d)?s?(.|\)
[\W_]adsence.sogou.com|union.narrowad.com|code1.caiku.com[\W_]

看来,以前弄的那些从其他过滤软件弄来的正则一直都没生效的呀。
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 关于广告过滤的正则表达式的格式

Post by phoenix »

imsheng wrote: (ete|ez|unionsky|shareware).cn|51.la
这句,“|”前面的匹配生效了,但后面的51.la没生效。“|”这些符号没用的?
  1. 我测试是生效的
  2. 如果你的表达式是用在blockfile里,分行写比写在一起效率更高
imsheng wrote: 类似这些需要怎样修改?
(.|\)(1tong|265|51(ad|.la|yes|link)|alexa|alibaba|ebay|gimg|hotadv?|icast|unicom|itsun|union(sky)?|usmsad)(\d)?s?(.|\)
[\W_]adsence.sogou.com|union.narrowad.com|code1.caiku.com[\W_]
看来,以前弄的那些从其他过滤软件弄来的正则一直都没生效的呀。
这个正则表达式并不复杂,如果你学习了正则表达式和Proxomitron的过滤语法,改写起来并不难。我乐意提供帮助,但前提是你先掌握了基本知识。
imsheng wrote: 很明显就是简单的字符串匹配,效率不高,只能一个一个加。下决心搞懂这个正则。
再说一遍,分行写比用正则写在一起效率高,具体原因看帮助吧。
imsheng wrote: 还有,sidki的配置太复杂了。真的出了问题也不知道在哪里改。希望有简要的说明。
是复杂,但并不需要你来维护规则。换言之,使用起来并不复杂。打个比方,windows你用得很熟练了吧?但你使用它的时候要管它的代码是怎么编写的吗?
关于sidki的配置使用上的问题,可以在相应讨论区提出,前提还是你要仔细阅读了sidki配置的相关文档。
imsheng
Posts: 37
Joined: Jan 08 2008, 13:24

Re: 关于广告过滤的正则表达式的格式

Post by imsheng »

我是有些心急。看那些文档也总是看不进去。
WINDOWS的源码是不看。但偶尔也去看些内核分析的书,看功能的具体实现。
分行写是单纯的字符串匹配。当然要比正则快。正则还要用正则引擎来匹配。

sidki的配置里总有好东西。研究下可以取出来自己用。拿来主义嘛。

把广告过滤写到配置里(cfg)不灵活。所以写到blockfile里好。


正则表达式和Proxomitron的过滤语法今天看了几个小时了。以前也有陆陆续续地接触过。但没上心。没有应用要求嘛。

# * 匹配任意的字符
# ? 匹配单个任意的字符
#
# ^ 开头是非运算
#
# [a-z0-9]
#
# [#n:n] 从多少到多少的数字
#
# \s 匹配空格
# \w 匹配任何非空格字符
#
# \t 匹配一个TAB空格
# \r 匹配一个回车(不知道是硬回车还是软回车)
# \n 匹配一个新行
#
# ([^/]++.|)somehost.com/ 前面为空或者有多个字符组成的子域名
# (http://www.|)somehost.com:[0-9]+/ www域名开头,后接端口号
# [^/]++somehost.com/ 不以/开头,有多个字符的字符串
# [^.]+.somehost.com/ 不以.开头,有一个或多个字符
# \w somehost.com/ 任意的不以空格开头的字符
# *somehost.com/(anything|after|here|is|fine)/\w.html 任意字符开头,中间夹着一些文件夹,任意的html文件
#
#
# \0-9 数字
# + 匹配一个或多个的前导字符

这是我的笔记。常用的就是这些。我希望有多一些的这些元字符性质的解释。

++和+,我分不太清楚。

还自己琢磨写了一条简单的
\wimages/[0-9]+(-|_)[0-9]+.\w
匹配
test.com/images/11_55.gif
test.com.cn/images/8545-5584.swf
类似这样的

正则是慢了点。但有技术含量呀。呵呵
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 关于广告过滤的正则表达式的格式

Post by phoenix »

imsheng wrote:我是有些心急。看那些文档也总是看不进去。
WINDOWS的源码是不看。但偶尔也去看些内核分析的书,看功能的具体实现。
有看内核分析的书的功力,只要你有兴趣,假以时日,一定会掌握Proxomitron的。
imsheng wrote:分行写是单纯的字符串匹配。当然要比正则快。正则还要用正则引擎来匹配。
分行写也可以用正则啊。
不谈通配符和正则2种方式的匹配效率高低,分行写有助于Proxomitron对索引建立hash,检索起来会更快,具体细节你可以参考帮助文件的“Creating blocklists”一节。
imsheng wrote:++和+,我分不太清楚。
简单来说,“+”是个瞎子,而“++”会向前看。以字符串“aaaaab”为例,

Code: Select all

(a++)\1ab
在匹配的时候会一直检查后面是否跟有“ab”,所以最后\1的内容是“aaaa”。

若换做:

Code: Select all

(a+)\1ab
因为“+”是个瞎子,不考虑后面跟了什么字符,(a+)会一直匹配到没有a字符,即匹配“aaaaa”,然后再尝试匹配“ab”,显然“aaaaa”之后没有“ab”,所以在本例中,该表达式将不能匹配字符串。
a646749
Posts: 2
Joined: Jun 04 2013, 11:31

Re: 关于广告过滤的正则表达式的格式

Post by a646749 »

phoenix wrote: 如果你的表达式是用在blockfile里,分行写比写在一起效率更高

Code: Select all

#ad( ad-|(_|-|)([0-9]|[a-z]))
#a_((h|cn|mu)|p(r|b))
#bm a_c
#wp (a_|header_gg)
比如以上几个规则,我是写在一起还是分开写好点呢?
感觉应该是写在一起,效率会好点吧?
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: 关于广告过滤的正则表达式的格式

Post by phoenix »

以现在计算机的运算速度,效率不再是需要考虑的问题。
我觉得刚开始写规则的时候,便于理解和维护更重要!
Post Reply