regex - 正则表达式如何防止后面跟着特定单词的匹配。像第一个字符包含前瞻之类的东西?

标签 regex perl expression regex-lookarounds

我正在使用正则表达式来匹配 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/

相关文章:

c++ - 从字符串中提取数字 (Regex C++)

regex - 如何删除与模式匹配的整行

mysql - 使用多个表的复杂 JOIN

sql-server - SSIS 表达式生成器 - GetDate() 到字符串 (dd-MMM-yy)

Java Play Ebean - 如何使用表达式 Expr.Or() 或类似的

json - 如何通过 key 访问 JSON 中的数据

java - 需要正则表达式来匹配android 4.2.1及以上版本

java - 为什么 String.split ("£", 2) 不工作?

java - 与 Java 中单词末尾的子字符串之一匹配的正确正则表达式是什么?

perl - grep 变量并给出信息输出