【问题标题】:How to search for words that contains upper case letters except a few words in Notepad++ Regex如何在Notepad ++ Regex中搜索包含大写字母的单词,除了几个单词
【发布时间】:2012-08-07 14:45:24
【问题描述】:

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

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

我尝试过构建这样的东西,但没有成功:

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

【问题讨论】:

    标签: regex notepad++


    【解决方案1】:

    关于您现有的正则表达式有两点需要注意。

    1. 例外列表中的“或”运算符应该是| 而不是++ 将被视为实际字符,而 | 将告诉正则表达式引擎“左”“右”,如您在本例中所希望的那样。
    2. 要匹配至少包含一个大写字母的完整单词,您实际上还需要检查小写字母,但“要求”至少包含一个大写字母。

    我想出了以下几点:

    (?:^|\.|[\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 关键字(如果需要)或其他允许的字符。

    【讨论】:

    • 你能确认这是正确的吗?我在这里尝试了一些示例(包括给定的示例,但它与任何示例都不匹配)。正则表达式的这一部分 ([a-z0-9]*[A-Z][a-zA-Z0-9]+) 做得很好,但是当我尝试添加第一部分时,它什么都不匹配。
    • @Vandell 刚刚使用您的示例复制/粘贴(您的示例和正则表达式)再次对其进行了测试,并且它完美匹配。我正在使用 Notepadd++ v6.1.2,如果这会有所不同(我现在将更新到最新版本并重新测试以确保)。
    • @Vandell 更新到 v6.1.5,它仍然适用于完整的正则表达式。
    • 我用的是5.9.8,我试试更新一下
    • @Vandell 那应该可以解决它(希望如此);根据他们的更新日志,PCRE(Perl Compatible Regular Expressions)从 v6.0 开始支持
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2012-12-20
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多