我正在使用正则表达式来匹配 SQL 查询中的 where 条件。
我要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/