请教:多个图片过滤

新手入门、经验交流

Moderator: cre

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

请教:多个图片过滤

Post by 不夜侯 »

有一个bbs,我想过滤签名下挂的图片。代码类似如下:

Code: Select all

<div style="width:85%;overflow-x: hidden; clear:both;float:left; text-align:left" id="sigline_4">
<img src="skins/Default/sigline.gif" /><br /><img  title="dvubb"  src="/UploadFace/11124_2006761793262767.jpg" border="0"  onload="imgresize(this);"/>
<img  title="dvubb"  src="/UploadFile/2006-7/20067617114696956.gif" border="0"  onload="imgresize(this);"/>
</div>
过滤的图片路径不包括<img src="skins/Default/sigline.gif" />,其他路径的图片全部过滤,但需要过滤的图片有1~4个不定。而且一定要限定在<div\s*id=$AV(sigline_[0-9]+{1,5})>内,否则会误过滤其他版块的正常图片。所以做了一规则,能完成任务。

Code: Select all

[Patterns]
Name = "kill_img_签名"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<div[^>]++id=$AV(sigline_[0-9]+{1,5})*>$INEST(<div*>,</div>)</div>"
Limit = 700
Match = "(\#<img[^>]++src=$AV((^*(/Default/sigline.gif)*)*)*>)+ \#"
Replace = "\@"

现在我想将所过滤的图片以链接的形式显示出来,将规则修改如下:

Code: Select all

[Patterns]
Name = "kill_img"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "<div[^>]++id=$AV(sigline_[0-9]+{1,5})*>$INEST(<div*>,</div>)</div>"
Limit = 700
Match = "(\#<img[^>]++src=$AV((^*(/Default/sigline.gif)*)\1)*>)+ \#"
Replace = "\@\n"
          "<a href=\1><font size="2"><span style="color:red">Proxo_img_\h</span></font></a>"

这个规则只能将所过滤的图片显示出一个链接来。
请教在过滤了2个以上图片时,怎样全部以链接的形式显示出过滤图片?
谢谢!
ddbb
Moderator
Posts: 425
Joined: Jan 07 2008, 13:30

Re: 请教:多个图片过滤

Post by ddbb »

User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请教:多个图片过滤

Post by cre »

成功了 :lol: 在我不懈努力下完美完成 :P

Code: Select all

[Patterns]
Name = "BlockFace"
Active = TRUE
Multi = TRUE
Limit = 12000
Match = "<(div\s([^>]++) id=$AV(sigline_*))\2\3<img  title="dvubb"\ssrc=$AV(\4)[^>]++> \5"
Replace = "<!--><\2 \3<a href="\4">Block Face</a>\5"
Attachments
效果图 31kb
效果图 31kb
2010-11-06_042620.png (30.37 KiB) Viewed 8908 times
不夜侯
Posts: 101
Joined: Jul 29 2009, 16:22

Re: 请教:多个图片过滤

Post by 不夜侯 »

谢谢!
如果仅仅是过滤多个图片,我在一楼的规则就可以完成。

我现在的问题是,在过滤了2个以上图片时,怎样以超链接的形式显示出全部过滤图片?
cre wrote:成功了 :lol: 在我不懈努力下完美完成 :P

Code: Select all

[Patterns]
Name = "BlockFace"
Active = TRUE
Multi = TRUE
Limit = 12000
Match = "<(div\s([^>]++) id=$AV(sigline_*))\2\3<img  title="dvubb"\ssrc=$AV(\4)[^>]++> \5"
Replace = "<!--><\2 \3<a href="\4">Block Face</a>\5"
这规则只能过滤一个图片,然后将过滤图片以链接的形式显示。遇到需要过滤多个图片时不行。
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请教:多个图片过滤

Post by cre »

不夜侯 wrote:这规则只能过滤一个图片,然后将过滤图片以链接的形式显示。遇到需要过滤多个图片时不行。
你看到我发的图没?我是过滤了4个没问题.不能过滤除非你给的例子有问题.

下面的代码我保存在本地测试是成功的.你保存成html,打开本地dbug试试再说.不要光在test试验.

Code: Select all

<div style="width:85%;overflow-x: hidden; clear:both;float:left; text-align:left" id="sigline_4">
<img src="skins/Default/sigline.gif" /><br />
<img  title="dvubb"  src="/UploadFace/11124_2006761793262767.jpg" border="0"  onload="imgresize(this);"/>
<img  title="dvubb"  src="/UploadFile/2006-7/20067617114696956.gif" border="0"  onload="imgresize(this);"/>
<img  title="dvubb"  src="/UploadFace/11124_2006761793262767.jpg" border="0"  onload="imgresize(this);"/>
<img  title="dvubb"  src="/UploadFile/2006-7/20067617114696956.gif" border="0"  onload="imgresize(this);"/>
</div>
不夜侯
Posts: 101
Joined: Jul 29 2009, 16:22

Re: 请教:多个图片过滤

Post by 不夜侯 »

cre wrote: 我保存在本地是成功的.你保存成html,打开本地dbug试试再说.不要光在test试验.
谢谢你的热心。这个规则在test测试不行,在实际网页中也是不行的。我给个实际网页试试

2楼有一个签名图片,4楼有两个签名图片。看这个规则后是什么效果?
2010-11-06_194443.png
2010-11-06_194443.png (272.48 KiB) Viewed 8888 times
我原先用了多个规则,但想精简成一个规则。
以4楼签名图片为例,我需要的效果是:
2010-11-06_195654.png
2010-11-06_195654.png (64.55 KiB) Viewed 8888 times
不夜侯
Posts: 101
Joined: Jul 29 2009, 16:22

Re: 请教:多个图片过滤

Post by 不夜侯 »

发现需要过滤的<img *>标签代码与其它<img *>标签代码有所不同。用下面的规则能达到我的目的。

Code: Select all

[Patterns]
Name = "kill_img_签名 bbs.guilinlife.com "
Active = TRUE
URL = "$TYPE(htm)bbs.guilinlife.com/dispbbs.asp\?boardID\="
Bounds = "<img */>"
Limit = 256
Match = "<img  title=$AV(dvubb) src=$AV((^*(/Default/sigline.gif)*)\1) border=$AV(0) onload=$AV(imgresize*)/>"
Replace = "<a href=\1><font size="2"><span style="color:red">Proxo_img_\h</span></font></a>"

但我想知道,如果需要过滤的<img *>标签代码与其它<img *>标签代码没有区别,一定要限定在<div\s*id=$AV(sigline_[0-9]+{1,5})>标签内,将所过滤的多个图片以超链接的形式显示出来,这个规则应该如何写?
谢谢!
User avatar
cre
Moderator
Posts: 91
Joined: May 26 2009, 00:34

Re: 请教:多个图片过滤

Post by cre »

不夜侯 wrote:
cre wrote: 我保存在本地是成功的.你保存成html,打开本地dbug试试再说.不要光在test试验.
谢谢你的热心。这个规则在test测试不行,在实际网页中也是不行的。我给个实际网页试试
热心不热心的我晕....估计我回帖说话有点忘形,菲菲删我不当回帖了.
请你确定你是"原样"导入规则,而不是复制了match和relpace....此规则使用了Multi.
规则是不大高效,但是,绝对工作.

Code: Select all

[Patterns]
Name = "BlockFace"
Active = TRUE
Multi = TRUE
Limit = 12000
Match = "<(div\s([^>]++) id=$AV(sigline_*))\2\3<img  title="dvubb"\ssrc=$AV(\4)[^>]++> \5"
Replace = "<!--><\2 \3<a href="\4">Block Face</a>\5"
原
2010-11-07_084346.png (64.52 KiB) Viewed 8880 times
请看,并不是简单替换.鼠标放上去会提示地址.

稍微改下

Code: Select all

[Patterns]
Name = "BlockFace"
Active = TRUE
Multi = TRUE
URL = "bbs.guilinlife.com"
Limit = 12000
Match = "<(div\s([^>]++) id=$AV(sigline_*))\2\3<img  title="dvubb"\ssrc=$AV(\4)[^>]++> \5"
Replace = "<!--><\2 \3<a href="\4"><font color=blue>Block Face url</font><font size="2"><span style="color:red">\4</span></font></a>\5"
修改
修改
2010-11-07_084853.png (67.19 KiB) Viewed 8880 times
没错,我过滤的是过度了,但是也是按你说的要求做到了,你说的是[0-9]+{1,5},而此帖子出现的最高是20,最低出现的是1,所以[0-9]+完全满足需求.

Code: Select all

<div style="......" id="sigline_数字">
的要求也满足了.
请仔细测试,你这测试有点马虎阿.
简单的html代码修改你应该会吧.把

Code: Select all

<span style="color:red">\4</span>
的\4换成\h,blockfaceurl换成"Proxo_img_"就行了
本来昨天菲菲讲我用的方法有点那个啥,技术含量不高....今天得空来想再看看去实现....你这一番话让我很无语阿.
不夜侯
Posts: 101
Joined: Jul 29 2009, 16:22

Re: 请教:多个图片过滤

Post by 不夜侯 »

cre wrote:
稍微改下

Code: Select all

[Patterns]
Name = "BlockFace"
Active = TRUE
Multi = TRUE
URL = "bbs.guilinlife.com"
Limit = 12000
Match = "<(div\s([^>]++) id=$AV(sigline_*))\2\3<img  title="dvubb"\ssrc=$AV(\4)[^>]++> \5"
Replace = "<!--><\2 \3<a href="\4"><font color=blue>Block Face url</font><font size="2"><span style="color:red">\4</span></font></a>\5"
规则当然是"原样"导入,测试时没看到勾选了“Allow for multiple matches”,抱歉。
另外,Limit = 12000 为什么设这么大? Replace = "<!-->中的<!-->我也没看明白。请指点。
你这个规则的问题是,误过滤了签名栏以外的图片,以及正常的楼层。3、19、20层没有了。
2010-11-07_130852.png
2010-11-07_130852.png (165.35 KiB) Viewed 8872 times
User avatar
phoenix
Site Admin
Posts: 529
Joined: Dec 29 2007, 16:27

Re: 请教:多个图片过滤

Post by phoenix »

首先,以后提问之初就请提供目标 URL 以便于测试。

关于你原来的代码:

Code: Select all

(\#<img[^>]++src=$AV((^*(/Default/sigline.gif)*)\1)*>)+
思路是对的,问题在于每次循环的时候 \1 的值都被覆盖了,所以最后只显示了一个链接,即最后匹配到的链接。

解决方法是在循环之前将 \1 的值储存起来,请参考修正后的规则:

Code: Select all

[Patterns]
Name = "kill_img"
Active = TRUE
URL = "$TYPE(htm)bbs.guilinlife.com/dispbbs.asp\?boardID\="
Bounds = "<div\s[^>]++id=$AV(sigline_[0-9]+{1,5})*>$INEST(<div,</div>)</div>"
Limit = 700
Match = "(\#<img[^>]++src=$AV((^skins/Default/sigline.gif)(\1))*>"
        "  $SET(#=<a href="\1"><span style="color:red;">Proxo_img_\h</span></a>))+"
        "\#"
Replace = "\@"
Post Reply