ancintosh
狐狸大王
狐狸大王
  • UID11069
  • 注册日期2006-01-11
  • 最后登录2011-08-14
  • 发帖数423
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
45楼#
发布于:2004-11-30 00:19
问一下.正则表达式里通配符是什么?好象不是*吧.还有[]括号是什么含义?
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
46楼#
发布于:2004-11-30 00:19
最近正则在 maxthon 论坛很火,有人转了这个帖子。看了看,感觉大家对正则或过滤似乎还是不太掌握,在 maxthon 论坛提了些意见,顺便在这里分享一下。

首先过滤速度主要视乎过滤规则的复杂性,或匹配条件的多少,而非过滤规则多少。所以不要把匹配条件都免勉强跻进同一规则。一条效率低的规则可以比十条规则慢。

像顶楼例子:
3.三段体
例:
(union|adimg|unstat|ulinkjs)\.(baidu|tom|163|sogou)\.(com)
等价于
*adimg.163.com*
*unstat.baidu.com*
*ulinkjs.tom.com*
*union.sogou.com*

这里本来只有 4 个匹配条件:
adimg.163.com
unstat.baidu.com
ulinkjs.tom.com
union.sogou.com

有效的写法为 (adimg.163|unstat.baidu|ulinkjs.tom|union.sogou)\.com
红色部份更加可省略,减低处理量。

但用上面写法 (union|adimg|unstat|ulinkjs)\.(baidu|tom|163|sogou)\.(com) 便产生 16 个匹配条件:
union.baidu.com
adimg.baidu.com
unstat.baidu.com
ulinkjs.baidu.com
union.tom.com
adimg.tom.com
unstat.tom.com
ulinkjs.tom.com
union.163.com
adimg.163.com
unstat.163.com
ulinkjs.163.com
union.sogou.com
adimg.sogou.com
unstat.sogou.com
ulinkjs.sogou.com

不用说效率及准确度都差得多了。

另外大家都知道 adblock 是用 javascript 编写的,而 javascript 是 interpret 语言,速度一般只有  c++,vs,dephani 等 compiled language/machine code 的 10 到 20 分之一,不适宜作大量运算,否则会做成像某版主说的用 css 下载隐藏感觉上比用 adblock 直接过滤还更快。



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
drsu
狐狸大王
狐狸大王
  • UID1387
  • 注册日期2004-12-25
  • 最后登录2008-12-20
  • 发帖数367
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
47楼#
发布于:2004-11-30 00:19
abc@home
另外大家都知道 adblock 是用 javascript 编写的,而 javascript 是 interpret 语言,速度一般只有  c++,vs,dephani 等 compiled language/machine code 的 10 到 20 分之一,
回到原帖


你总算逻辑正常了。
不过,
"vs","dephani"是什么语言?
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
48楼#
发布于:2004-11-30 00:19
应该是 vb 和 dephi,打错字。 -__-!!



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
zeroieme
千年狐狸
千年狐狸
  • UID12805
  • 注册日期2006-05-17
  • 最后登录2015-10-11
  • 发帖数1407
  • 经验34枚
  • 威望0点
  • 贡献值20点
  • 好评度0点
  • 社区居民
49楼#
发布于:2004-11-30 00:19

像顶楼例子:

这里本来只有 4 个匹配条件:
adimg.163.com
unstat.baidu.com
ulinkjs.tom.com
union.sogou.com

有效的写法为 (adimg.163|unstat.baidu|ulinkjs.tom|union.sogou)\.com
红色部份更加可省略,减低处理量。

但用上面写法 (union|adimg|unstat|ulinkjs)\.(baidu|tom|163|sogou)\.(com) 便产生 16 个匹配条件:
union.baidu.com
adimg.baidu.com
unstat.baidu.com
ulinkjs.baidu.com
union.tom.com
adimg.tom.com
unstat.tom.com
ulinkjs.tom.com
union.163.com
adimg.163.com
unstat.163.com
ulinkjs.163.com
union.sogou.com
adimg.sogou.com
unstat.sogou.com
ulinkjs.sogou.com

不用说效率及准确度都差得多了。

貌似很正确的
ad\d+\.(gif|jpg)
岂不是产生无数个匹配条件,永远算不完
   
abc@home
千年狐狸
千年狐狸
  • UID6047
  • 注册日期2005-05-16
  • 最后登录2011-01-01
  • 发帖数1681
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
50楼#
发布于:2004-11-30 00:19
zeroieme
貌似很正确的
ad\d+\.(gif|jpg)
岂不是产生无数个匹配条件,永远算不完
   
回到原帖

当然不是,需要匹配的字串长度不可能无限,url 最长也不超过 1k 吧。

另外视乎你原来要匹配的是甚么,假设你只要匹配 ad0.gif, ad1.gif,...ad9.gif
你认为那个较有效率,较准确?
ad\d\.gif 还是 ad\d{1,10}\.gif 還是 ad\d{1,10}\.(gif|jpg)  還是 ad\d+\.(gif|jpg)



WINXP SP2 MAXTHON (UNICODE) PROXOMITRON
a__gu
小狐狸
小狐狸
  • UID26344
  • 注册日期2008-09-20
  • 最后登录2008-09-21
  • 发帖数2
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
51楼#
发布于:2004-11-30 00:19
我也来学习了!!
上一页 下一页
游客

返回顶部