2017-02-22 55 views
0

我正在遷移數據庫到SQL項目非封裝的文本,並需要更換跨數據庫的所有實例與SQLCMD變量調用,並且很努力寫一個正則表達式來幫助我找到我仍然需要更新的地方。正則表達式來查找也沒有被註釋掉

在SQL中,我們有以下幾點:

MyOtherDatabase.MySchema.MyTable 
[MyOtherDatabase].MySchema.MyTable 

,我需要更改爲:

[$(MyOtherDatabase)].MySchema.MyTable 

到目前爲止,我想出了下面的正則表達式:

([^(]M|^M)yOtherDatabase 

找到所有使用「MyOtherDatabase」的位置,並且沒有被變量替換。

然而,它也拿起它,在SQL註釋,如:

-- I don't want to find MyOtherDatabase in this line 

FROM ADifferentPlace -- Used to be MyOtherDatabase 

如果這只是少數情況下,我會住在一起,但我目前已經有560場比賽,其中大部分是上述其中一場比賽,因此人爲錯誤很容易阻礙。

我使用這個正則表達式中的「搜索」框的Visual Studio 2015年中,隨着「使用正則表達式」複選框勾選。

任何建議將有所幫助!

編輯

還需要無法找到以下內容:

from MyTable -- from MyOtherDatabase.MySchema.MyTable 
+0

https://regex101.com/r/2fdzEa/2 –

回答

2

如果環境支持可變長度負lookbehinds,你可以使用以下方法來避免匹配任何註釋部分:

search for (?<!--.*)MyOtherDatabase(?=]?\.) 
replace by $(MyOtherDatabase) 

如果沒有,您仍然可以匹配從開始的行:

search for ^((?:[^-]|-[^-])*)MyOtherDatabase(]?\.) 
replace by \1$(MyOtherDatabase)\2 
+0

差不多!這使我下降了大約200個結果,但我仍然發現誤報。我會更新這個問題,以指出還有什麼還在拾起 – Sk93

+0

Perfecto!只有7場比賽 - 歡呼聲! – Sk93

+0

@ Sk93做了可變長度的負向倒序工作? – Aaron