3

我正在使用正则表达式来匹配 SQL 查询中的 where 条件。

我想要WHERE <ANY CONDITION>,但除了WHERE ROWNUM <WHATEVER>.
所以我不想ROWNUM出现在WHERE关键字之后。

我确实使用Lookaheads来实现这一点。我的正则表达式是WHERE (.*(?! ROWNUM )+). 问题是,它仍然匹配WHERE ROWNUM < 1000。如果我在正则表达式中删除了之前的空格ROWNUM,那么名称以结尾的任何列ROWNUM都将不匹配。如果我删除之后的空格,WHERE即使WHERE关键字后面没有空格,它也会匹配。ROWNUM但是,如果和关键字之间有两个空格或任何其他字符WHERE(可能是条件),则可以。所以如果ROWNUM是第一个条件,我的正则表达式不起作用。

我怎样才能解决这个问题 ?

4

1 回答 1

3

听起来你想要

WHERE(?!.*\bROWNUM\b).*

它将匹配WHERE .*除非.*包含ROWNUM被单词边界包围的a 。( \b,“单词边界”,是一个零宽度断言,表示前面有一个字母或数字或下划线后面有一个字母或数字或下划线的位置,但不是两者都。)

于 2012-03-06T16:37:25.227 回答