Page 1 of 1

请教两个规则的写法

Posted: Dec 26 2009, 14:34
by 不夜侯
假设有个要过滤的标签代码如下:

Code: Select all

<script type="text/javascript">
000adtop111
</script>
adtop 为关键字过滤,为避免去扫描过滤这样的代码:

Code: Select all

<script  type="text/javascript" 333adtop444>
000111
</script>
制定规则如下:

Code: Select all

[Patterns]
Name = "Killad script_content"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 800
Match = "$NEST(<script[^>]+>,*adtop*</script>)"
测试虽然能够达到我的要求,但是这个规则会CPU高得死机。
请教:如果只以标签之间的内容为关键字过滤,而不是过滤标签属性值,正确规则写法怎样?谢谢!

26 Dec 2009, 21:38:
尝试这样写,似乎能满足我的要求。

Code: Select all

[Patterns]
Name = "Killad script_content"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 800
Match = "$NEST(<script[^>]+>,(\1&&*adtop*),</script>)"

Re: 请教两个规则的写法

Posted: Dec 26 2009, 14:39
by 不夜侯
与上面的情况相反。假设要过滤的代码如下:

Code: Select all

<script type="text/javascript" src="./styles/ad/styleswitcher.js"></script>
/ad/ 为关键字过滤,为避免去扫描过滤这样的代码:

Code: Select all

<script type="text/javascript">  0000000000 src="./styles/ad/styleswitcher.js" 11111111</script>
我制定下面的规则,测试是成功的,写法正确吧?

Code: Select all

[Patterns]
Name = "Killad script-URL"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 300
Match = "$NEST(<script,(\s[^>]+>&&*src=$AV(*/ad/*)*),</script>)"

Re: 请教两个规则的写法

Posted: Dec 27 2009, 10:43
by phoenix
<script> 标记一般不嵌套,所以没必要用 $NEST() 命令。

第一个问题,可以写成如下形式:

Code: Select all

[Patterns]
Name = "Killad script_content"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<script\s*</script>"
Limit = 800
Match = "<script\s[^>]+>*adtop*</script>"
第二个问题:

Code: Select all

[Patterns]
Name = "Killad script-URL"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<script\s*</script>"
Limit = 800
Match = "<script\s([^>]+&&*src=$AV(*/ad/*)*)>*"

Re: 请教两个规则的写法

Posted: Dec 28 2009, 09:18
by 不夜侯
phoenix wrote:<script> 标记一般不嵌套,所以没必要用 $NEST() 命令。
.............
谢谢一直很尽责的phoenix。
另外还有个小问题,也在这请教。
我好像记得在哪看过网页过滤规则是按自上而下的顺序进行过滤。那么针对特定网站的规则与通用规则谁先谁后更有效率还是没有区别?

Re: 请教两个规则的写法

Posted: Dec 28 2009, 17:02
by phoenix
不夜侯 wrote:我好像记得在哪看过网页过滤规则是按自上而下的顺序进行过滤。
没错。
不夜侯 wrote: 那么针对特定网站的规则与通用规则谁先谁后更有效率还是没有区别?
没有区别。

如果2个规则匹配的是同一段代码,那么第一个规则匹配后,第二个规则就匹配不到了,除非第一个规则设置了 Multi match 标记。

因此,怎么排序,主要是看你希望哪个规则先匹配到。