正则表达式,用于查找未被注释掉的非封装文本

时间:2017-02-22 13:37:43

标签: regex

我正在努力将数据库迁移到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

1 个答案:

答案 0 :(得分:2)

如果您的环境支持可变长度负面反馈,您可以使用以下内容来避免匹配任何已注释的部分:

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

如果没有,您仍然可以从头开始匹配行:

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