我正在尝试解析一种包含创建函数和存储过程等命令的大型 SQL 脚本。我想在找到 GO 语句时将文件拆分为字符串(我想使用普通的 ado.net 而不是 SMO 来执行它)。
问题是到目前为止我还没有找到合适的正则表达式。使用简单的\bGO\b
忽略大小写将拆分它。但也会在评论中拆分所有 go(s)
-- 此行也将被拆分
使用这个表达式^\bGO\b[^--]$
几乎可以解决我的问题,但是当我有两个连续的 GO(无论出于何种原因在我的域之后)时,我会遇到一些错误。
end
go
GO
Run Code Online (Sandbox Code Playgroud)
这就是我的脚本中 SP 创建结束的样子。
我是用 C# 做的
非常感谢
**编辑**
一位同事提出了一个解决方案,目前适用于我的所有脚本
^\s*go\s*\r\n
你可以试试这个:
(?i-msnx:\b(?<!-{2,}.*)go[^a-zA-Z])
Run Code Online (Sandbox Code Playgroud)
意思是,如果字符串前面没有 2 个或更多破折号,后面没有任何内容,则将字符串转为go 。
这应该可以解决问题!
编辑为仅在字边界处强制检查
编辑以忽略“go”后跟字母/数字(最后一次尝试:))并添加到正则表达式工具的链接
PS:如果您还没有发现这是有关 RE 的绝佳资源。
PS2:这是RE 创作/测试的绝佳工具