返回列表 发帖

匹配sql语句中的select 等操作

我用(?!<)(select|update|alter|delete)(?=\s)这样来查找sql语句中的关于数据库的操作,但为什么也会匹配html中的<select呀,但也可以用[^<]来限定。


不解,请高手解释一下。

源文本,please.
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

好吧,我猜测一下你的正则表达式。

以下称(?!<)为条件1, (select|update|alter|delete)为条件2.
(?!<),估计你是要匹配“当前位置不出现一个左尖括号”。不过,它后面还有(select|update|alter|delete)这一串,因此,当前位置的综合定义就是,当前位置不出现一个左尖括号,而且它必须是多选结构(select|update|alter|delete)中的一个。

从逻辑上讲,只要满足了条件2,条件1自然就已经得到满足。因此,条件1是没有必要列出来的。

但是,估计你的真实意图不是对当前位置做双重定义,而是说,(select|update|alter|delete)之前的字符的位置不出现左尖括号。因此,你的正则表达式应该修改为
  1. (?<!<)(select|update|alter|delete)(?=\s)
复制代码
见插图


建议:请读一下关于(?!, (?=, (?<=, (?<! 的用法和区别
附件: 您需要登录才可以下载或查看附件。没有帐号?注冊
在答疑解惑版提问时,请注明所用语言、范例文本、匹配结果。谢谢!
------------------------------------------------------------------------------
我爱正则表达式
GTalk: rex[at]zhasm[dot]com
Twitter: rex_zhasm

TOP

简单解释如下:

(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression
1

评分人数

  • rex

TOP

估计你的真实意图不是对当前位置做双重定义,而是说,(select|update|alter|delete)之前的字符的位置不出现左尖括号。因此,你的正则表达式应该修改为
(?<!<)(select|update|alter|delete)(?=\s)


牛。

谢谢两位。

TOP

返回列表