2012-08-07 91 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

相關問題