给定sql查询,其中一些列具有大写字母,如何搜索包含大写字母但不包含SQL关键字的单词,例如:
SELECT ... ,
table1.thisColumn AS column,
...
FROM table1
我尝试过这样的事情没有成功:
(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{2,}
答案 0 :(得分: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
“搜索”,则会突出显示匹配的字词和前面的.
或空白字符。
如果你使用它来“替换”,可以通过.
匹配使用/访问匹配的单词(没有前面的\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关键字(如果需要)或其他允许的字符。