如何搜索包含大写字母的单词,除了Notepad ++ Regex中的几个单词

时间:2012-08-07 14:45:24

标签: regex notepad++

给定sql查询,其中一些列具有大写字母,如何搜索包含大写字母但不包含SQL关键字的单词,例如:

SELECT ... ,
    table1.thisColumn AS column,
    ...
    FROM table1

我尝试过这样的事情没有成功:

(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{2,}

1 个答案:

答案 0 :(得分:2)

有关现有正则表达式的两点注意事项。

  1. 例外列表中的“或”运算符应为|,而不是++将被视为实际字符,而|将告诉正则表达式引擎“左”“正确”,正如您所希望的那样。
  2. 要匹配包含至少一个大写字母的全字,您实际上也需要检查小写字母 - 但“要求”至少一个大写字母。
  3. 我想出了以下内容:

    (?:^|\.|[\t ])(?!AS|FROM|LEFT|JOIN|ON)([a-z0-9]*[A-Z][a-zA-Z0-9]+)
    

    我针对您的示例查询对此进行了测试,并为其添加了其他随机SQL(例如扩展字段列表,WHERE子句等)。它成功地找到了包含至少一个大写字母的每个单词,并且不在要忽略的关键字列表中。

    如果您使用此功能只是通过Find NextFind 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关键字(如果需要)或其他允许的字符。