2012-08-07 38 views

回答

2

有两件事情需要注意您现有的正则表达式。

  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这只是“搜索”,它会突出匹配的单词和在前.或空白字符(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关键字添加(如果需要),或在其他允许的字符“的话能有这些人物”名单。

+0

你能证实这是正确的吗?我已经尝试了一些例子(包括给定的例子,但它不匹配任何东西)。这部分的正则表达式([a-z0-9] * [A-Z] [a-zA-Z0-9] +)做得很好,但是当我尝试添加第一部分时,它什么都不匹配。 – 2012-08-07 18:37:05

+0

@Vandell刚刚使用示例复制/粘贴(包括您的示例和正则表达式)再次测试它,并且它完美匹配。我使用的是Notepadd ++ v6.1.2,如果这有所作为(我会立即更新到最新版本,并重新测试以确保)。 – newfurniturey 2012-08-07 18:41:38

+0

@Vandell更新到v6.1.5,它仍然正常工作正常的正则表达式。 – newfurniturey 2012-08-07 18:46:18

相关问题