标题:
关于过滤规则的几点疑问
[打印本页]
作者:
origin
时间:
2008-6-8 22:35
标题:
关于过滤规则的几点疑问
置顶的过滤规则教程里关于正则表达式有如下表述:
$i
表示前面用 () 捕获的第 i 个子表达式. i = 1, 2, 3...
例: $1 表示前面用 <a[^>]*?href=(".*?")[^>]*?> 捕获 <a href="http://bbs.ioage.com/">
得到的 "http://bbs.ioage.com/" 部分. 用于 replace 及 return 部分
复制代码
实践证明这里的
$i
似乎应为
\i
1、正则表达式的种类似乎太多(比如微软的MSDN里提到的、Perl正则表达式、Unix正则表达式、UltraEdit正则表达式等等,奇怪的是微软的VS2008编辑器用的正则表达式似乎和MSDN里提到的不完全相同),虽然大同小异,但这些“小异”往往会造成很多麻烦。论坛是不是出一个由开发者提供的正则表达式规范?
2、广告过滤时,似乎只能利用正则表达式来检索,而不能用来替换。举个例子,比如我要把
<a href="path1...">xxx</a>
复制代码
的内容(其中xxx是任意合乎html规范的内容)替换成
<a href="path2...">xxx</a>
复制代码
按照一般正则表达式的理解,只需写成如下
#ex#<a href="path1([^"]*?)">([^<]*>)</a>#<a href="path2\1">\2</a>
复制代码
即可。遗憾的是目前版本的TW不支持这么干。
作者:
yuyuye
时间:
2008-6-11 08:12
第一个:
\i 用于在正则表达式中引用
$i 用于替换
支持楼主,希望开发组明确TW所采用的RE引擎。
第二个:
正如第一个所说,替换部分不应该用 \i,换成 $i 就对了
作者:
elkay
时间:
2008-6-11 17:33
标题:
回复 1# origin 的帖子
1.很明显,你没有实践
2.很明显可以,还是说明你没有仔细看1
#ex#<a href="path1([^"]*?)">([^<]*>)</a>###<a href="path2$1">$2</a>
复制代码
作者:
狄烁stec
时间:
2008-6-11 18:32
教程说的很清楚:$i是用在替换部分,\i则用在匹配表达式里面.
<([^>]+)>.*?<\/\1>
可以匹配<p>abc</p>,<scrpt>.....</script>这样的文本
1.
正则表达式发展到现在有很多流派,不同的流派又有很多软件,他们的实现方法不同,并加入了各自认为应该有的功能,所以就出现了楼主说的"小异".
2.
elkay版主已经给出了答案.
个人认为第二个捕获有点问题.
#ex#<a href="path1([^"]*)">([^<]*)</a>###<a href="path2$1">$2</a>
复制代码
作者:
origin
时间:
2008-6-12 21:41
过滤本页的源码的
<html xmlns="http://www.w3.org/1999/xhtml">
用
#ex#<html xmlns=(['"])([^'"]*?)$1>###<html $2>
复制代码
过滤,结果不变
<html xmlns="http://www.w3.org/1999/xhtml">
用
#ex#<html xmlns=(['"])([^'"]*?)\1>###<html $2>
复制代码
过滤,结果为
<html
http://www.w3.org/1999/xhtml
>
,满足要求
用
#ex#<html xmlns=(['"])([^'"]*?)\1>###<html \2>
复制代码
过滤,结果为
<html \2>
智商有限,就只贴试验结果,不加评论了
作者:
elkay
时间:
2008-6-13 13:48
标题:
回复 3# origin 的帖子
不同的情况下要有不同的使用方法
作者:
origin
时间:
2008-6-13 19:54
标题:
回复 4# elkay 的帖子
所以有了顶楼1号要求
作者:
needed
时间:
2008-6-14 09:32
\n 捕获的是 正则规则缓冲区
$n 指的是后向引用...
不同的概念别混淆了..
### 后的 \1 不会有任何东西的...
欢迎光临 世界之窗论坛 (http://bbs.theworld.cn/)
Powered by Discuz! 7.2