采集过滤规则无效

优质
小牛编辑
138浏览
2023-12-01
在采集的使用中我们为采集项,设置了过滤项后,有的时候会出现无效的情况。也就是采集出来的结果并没有按我们的想像的把过滤项给删除了。这是为什么呢?
如下面的一个例子,我们在过滤项中进行如下的设置:
../down.php?uri=[|]

他的意思是要把“../down.php?uri=”给过滤掉。可采集出来的结果很不近人意。并没有把这个字符串给过滤掉。这是为什么呢?
PHPCMS V9的采集过滤项,使用的是正则表达式匹配过滤。在我们的上面所设置的过滤项中出现了一些正则表达式的特殊符号。当我把过滤规则修改为:

\.\./down\.php\?uri=[|]

过滤项生效了。这里要给大家说明的一个问题就是,正则表达式中的特殊字符只要在它的前面加一个反斜线(\),他的意思就是表示为符号本身了,不再是正则表达式中的有特殊意义的字符了。
那么正则表达式里面又有哪些需要注意的特殊符号呢?如下表所示,这些符号如果我们要匹配他们的时候都需要在他们的前面添加反斜线。

字符 说明
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
. 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"