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

新手入门、经验交流

Moderator: cre

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

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

Post 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;">"
请问:这样的两个规则能合并成一个规则吗?谢谢!
User avatar
phoenix
Site Admin
Posts: 529
Joined: Dec 29 2007, 16:27

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

Post 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"
不夜侯
Posts: 101
Joined: Jul 29 2009, 16:22

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

Post 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"

User avatar
phoenix
Site Admin
Posts: 529
Joined: Dec 29 2007, 16:27

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

Post by phoenix »

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

Code: Select all

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