我正在使用正则表达式来匹配SQL查询中的条件。
我要WHERE <ANY CONDITION>
,但WHERE ROWNUM <WHATEVER>
除外。
因此,我不希望ROWNUM
出现在WHERE
关键字之后。
我确实使用Lookaheads来实现。我的正则表达式是WHERE (.*(?! ROWNUM )+)
。问题是,它仍然与WHERE ROWNUM < 1000
匹配。如果我在正则表达式中删除ROWNUM
之前的空格,则名称以ROWNUM
结尾的任何列都将不匹配。如果删除WHERE
后的空格,则即使WHERE
关键字后没有空格,它也会匹配。但是,如果ROWNUM
和WHERE
关键字之间有两个空格或任何其他字符(可能是条件),则可以。因此,如果ROWNUM
处于第一个条件,则我的正则表达式将不起作用。
我怎样才能解决这个问题 ?
最佳答案
听起来像你想要的
WHERE(?!.*\bROWNUM\b).*
除非
WHERE .*
包含被单词边界包围的.*
,否则它将匹配ROWNUM
。 (\b
,“单词边界”,是一个零宽度的断言,表示一个位置,该位置后面是字母或数字或下划线,或者后面是字母或数字或下划线,但不能两者都用。)关于regex - 正则表达式如果后面有特定的单词,如何防止匹配。像第一个字符包含在内的前瞻性内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9587689/