返回列表 发帖

规则写法 粗谈

                                                                       前言
1、想要搞定广告,自然得知道广告在HTML代码中的位置,知道位置,把它从HTML中刨除,使得网页解析的时候就没得广告解析,从而达到过滤广告的效果。
2、TW提供的过滤规则实际可以看成:我给出一个过滤式,然后TW通过过滤式描述的内容在HTML源码中剔除相应的代码。
                                                                   粗人的粗写法
    [^>]*? 用于<>内任意字符
    [\s\S]*?用于<>外任意字符或者前面已经有一个>结尾 之后的任意字符

    查查正则表达式里 元字符的意思,例如你想要过滤掉.(点),那么你的正则写法应该为\.(右斜杠点)
    HTML属于前后对称的语法,故我们一般看到的效果(例如文字:LLL),在HTML源代码里都被至于<><>之间,形如<>LLL<>。
    既然正则提供了强大的字符匹配功能,那么我们只需要描述广告的<>标记,俗称tag标记,然后在tag标记间用任意字符代替,不管广告本身要描述的内容有多大,多广,统统搞定。
    最后需要做的就是唯一性了,举个例子,我写一篇文章,标题是3号字体的LLL,对应的HTML代码是:               <font size="3">LLL</font>
    文章正文是4号字体的LLL,对应的HTML代码是:          <font size="4">LLL</font>         
            
    写规则的时候,可以使用<font[^>]*?>[\s\S]*?<\/font>来描述,但你会发现不管3,4号的两种字体都被过滤了,这里的问题就在于规则的[^>]*?匹配font所在中括号内的所有字符,包括空格,自然3和4也被匹配了,所以都符合过滤规则,双双被拿下。
   如果我只想要过滤掉3号字体的LLL,那么只能让过滤条件符合3,也就是我们所说的唯一性了,对比两端代码会发现,除了3和4不同外,其余的地方均相同,那么我们点明匹配3,即
<font[^>]*?3">[\s\S]*?<\/font> 即可实现针对3号字体的过滤。

    注意:在上述规则[^>]*?3"处,我使用了3"结尾,但同样也可以使用3[^>]*?结尾,前者只能特定匹配以3"结尾然后>,后者却可以匹配3或者3后面跟任意数量字符的,包括"在内然后>的,通俗的说前者是后者的子集

0 0以后补充

[ 本帖最后由 duckZCX 于 2008-4-10 15:53 编辑 ]
1

评分人数

  • elkay

这里是永远的家 :)

#exd#*bbs.ioage.com/cn/viewthread.php?tid=55229&extra=page%3D1#<div id="postmessage_521742" class="t_msgfont">[\s\S]*?<\/div>###丫丫很满意啊

[ 本帖最后由 duckZCX 于 2008-4-10 16:54 编辑 ]
这里是永远的家 :)

TOP

原帖由 asin888 于 2008-4-10 19:10 发表 http://bbs.ioage.com/cn/images/common/back.gif
为什么不能用[\s\S]*?过滤?
为什么一定要把size=这类的用匹配符呢

通俗的说,习惯问题。

也可以说,您的方式是完全正确的
这里是永远的家 :)

TOP

返回列表