0
给定一个包含大写字母的列的sql查询,如何搜索包含大写字母但不包含SQL关键字的单词,例如:如何在记事本++正则表达式中搜索包含大写字母(几个字除外)的单词
SELECT ... ,
table1.thisColumn AS column,
...
FROM table1
我试过没有成功建立这样的事情:
(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{2,}
给定一个包含大写字母的列的sql查询,如何搜索包含大写字母但不包含SQL关键字的单词,例如:如何在记事本++正则表达式中搜索包含大写字母(几个字除外)的单词
SELECT ... ,
table1.thisColumn AS column,
...
FROM table1
我试过没有成功建立这样的事情:
(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{2,}
有两件事情需要注意您现有的正则表达式。
|
而不是+
。 +
将被视为一个实际的字符,而|
将告诉正则表达式引擎“左”或“正确”,如你所愿在这种情况下。我已经想出了以下内容:
(?:^|\.|[\t ])(?!AS|FROM|LEFT|JOIN|ON)([a-z0-9]*[A-Z][a-zA-Z0-9]+)
我测试这对你的样品查询,还添加了其他随机SQL它(如扩展字段列表,WHERE
条款等。 )。它成功找到每个包含至少一个大写字母的单词,但不在要忽略的关键字列表中。
如果您使用通过Find Next
或Find All in Opened|Current Documents
这只是“搜索”,它会突出匹配的单词和在前.
或空白字符(S)。
如果您正在使用它来“替换”,可以通过\1
匹配使用/访问匹配的单词(没有前面的.
或空格字符)。
正则表达式解释:
(?: # non-matching group;
# a "word" is required to be preceeded by one of the following
^ # beginning of line
|\. # period
|[\t ] # tab or space;
# note: we don't use the \s here because a newline will break notepadd++'s "find all" feature
)
(?!AS|FROM|LEFT|JOIN|ON) # list of words to ignore
( # group to match
[a-z0-9]* # word can start with lowercase a-z or 0-9
[A-Z] # required uppercase letter
[a-zA-Z0-9]+ # word can end with lowercase/uppercase a-z or 0-9
)
您也想在任何丢失SQL关键字添加(如果需要),或在其他允许的字符“的话能有这些人物”名单。
你能证实这是正确的吗?我已经尝试了一些例子(包括给定的例子,但它不匹配任何东西)。这部分的正则表达式([a-z0-9] * [A-Z] [a-zA-Z0-9] +)做得很好,但是当我尝试添加第一部分时,它什么都不匹配。 – 2012-08-07 18:37:05
@Vandell刚刚使用示例复制/粘贴(包括您的示例和正则表达式)再次测试它,并且它完美匹配。我使用的是Notepadd ++ v6.1.2,如果这有所作为(我会立即更新到最新版本,并重新测试以确保)。 – newfurniturey 2012-08-07 18:41:38
@Vandell更新到v6.1.5,它仍然正常工作正常的正则表达式。 – newfurniturey 2012-08-07 18:46:18