Page 1 of 1

请教:这样的两个规则能合并成一个规则不?

Posted: Jan 19 2011, 15:39
by 不夜侯
假设有在段需要过滤的代码如下:

Code: Select all

<div id="ad">00000000</div>
我制订过滤规则如下:

Code: Select all

[Patterns]
Name = "ad_div 1"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<div\s$INEST(<div *>,</div>)</div>"
Limit = 2560
Match = "<div[^>]++\sid=$AV(ad)*"
考虑到 <div id="ad"> 的广告通用性,假如 Limit 大于 2560 ,就用CSS来隐藏。就制订了另一个规则放在上面规则的后面:

Code: Select all

[Patterns]
Name = "ad_div 2"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<div\s[^>]+>"
Limit = 100
Match = "<div[^>]++\s(id=$AV(ad))\1 *>"
Replace = "<div \1 style="display:none;">"
请问:这样的两个规则能合并成一个规则吗?谢谢!

Re: 请教:这样的两个规则能合并成一个规则不?

Posted: Jan 20 2011, 12:07
by phoenix
用 | 就可以了。

Code: Select all

[Patterns]
Name = "ad_div remove or hide"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 2560
Match = "<div\s([^>]++\s|)id=$AV(ad)[^>]+>$INEST(<div*,</div>)</div>"
        "|<div\s(([^>]++\s|)id=$AV(ad))\0$SET(1=<div style="display:none;" \0)"
Replace = "\1"

Re: 请教:这样的两个规则能合并成一个规则不?

Posted: Jan 20 2011, 13:27
by 不夜侯
谢谢!
| 是否就是 | 前的条件先执行, 如果不满足则再执行| 后的条件?

Code: Select all

<div\s([^>]++\s|)id=$AV(ad)[^>]+>$INEST(<div*,</div>)</div>
$INEST(<div*,</div>)少了个 > 不然过滤不了嵌套div代码。另外前面有个 \s 没必要吧?

Code: Select all

[Patterns]
Name = "ad_div remove or hide"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 2560
Match = "<div\s[^>]++id=$AV(ad)[^>]+>$INEST(<div*>,</div>)</div>"
        "|<div\s(([^>]++\s|)id=$AV(ad))\0$SET(1=<div style="display:none;" \0)"
Replace = "\1"


Re: 请教:这样的两个规则能合并成一个规则不?

Posted: Jan 21 2011, 17:01
by phoenix
不夜侯 wrote:| 是否就是 | 前的条件先执行, 如果不满足则再执行| 后的条件?
是的。
不夜侯 wrote:$INEST(<div*,</div>)少了个 > 不然过滤不了嵌套div代码。
你对。其实我是多写了个 * ,本来想写成 $INEST(<div,</div>) 的。
不夜侯 wrote:另外前面有个 \s 没必要吧?
你那种写法,有可能会匹配:

Code: Select all

<div iiiid="ad">00000000</div>