0
給定一個包含大寫字母的列的sql查詢,如何搜索包含大寫字母但不包含SQL關鍵字的單詞,例如:如何在記事本++正則表達式中搜索包含大寫字母(幾個字除外)的單詞
SELECT ... ,
table1.thisColumn AS column,
...
FROM table1
我試過沒有成功建立這樣的事情:
(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{2,}
給定一個包含大寫字母的列的sql查詢,如何搜索包含大寫字母但不包含SQL關鍵字的單詞,例如:如何在記事本++正則表達式中搜索包含大寫字母(幾個字除外)的單詞
SELECT ... ,
table1.thisColumn AS column,
...
FROM table1
我試過沒有成功建立這樣的事情:
(?!AS+FROM+LEFT+JOIN+ON)[A-Z]{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
這只是「搜索」,它會突出匹配的單詞和在前.
或空白字符(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關鍵字添加(如果需要),或在其他允許的字符「的話能有這些人物」名單。
你能證實這是正確的嗎?我已經嘗試了一些例子(包括給定的例子,但它不匹配任何東西)。這部分的正則表達式([a-z0-9] * [A-Z] [a-zA-Z0-9] +)做得很好,但是當我嘗試添加第一部分時,它什麼都不匹配。 – 2012-08-07 18:37:05
@Vandell剛剛使用示例複製/粘貼(包括您的示例和正則表達式)再次測試它,並且它完美匹配。我使用的是Notepadd ++ v6.1.2,如果這有所作爲(我會立即更新到最新版本,並重新測試以確保)。 – newfurniturey 2012-08-07 18:41:38
@Vandell更新到v6.1.5,它仍然正常工作正常的正則表達式。 – newfurniturey 2012-08-07 18:46:18