- UID
- 22157
- 帖子
- 10849
- 精华
- 1
- 贡献
- 31
- 推广
- 1
- 有效BUG
- 0
- 注册时间
- 2006-10-5
|
前言
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
评分人数
-
|