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

我要WHERE <ANY CONDITION>,但WHERE ROWNUM <WHATEVER>除外。
因此,我不希望ROWNUM出现在WHERE关键字之后。

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

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

最佳答案

听起来像你想要的

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


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

关于regex - 正则表达式如果后面有特定的单词,如何防止匹配。像第一个字符包含在内的前瞻性内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9587689/

10-12 16:40