正则表达式拆分SQL脚本,但忽略拆分转到注释脚本下

正则表达式拆分SQL脚本,但忽略拆分转到注释脚本下,sql,regex,Sql,Regex,我试图解析一种大型SQL脚本,其中包含创建函数和存储过程等命令。每当我发现一个GO语句时,我就想将文件拆分成字符串(我想使用普通的ado.net而不是SMO来执行它) 问题是到目前为止我还没有找到一个合适的正则表达式。使用简单的\bGO\b忽略大小写将拆分它。但也会在评论中拆分所有go,如 /*****************************\ sql statement 1 GO sql statement 2 GO \****************************/ 我的

我试图解析一种大型SQL脚本,其中包含创建函数和存储过程等命令。每当我发现一个
GO
语句时,我就想将文件拆分成字符串(我想使用普通的ado.net而不是SMO来执行它)

问题是到目前为止我还没有找到一个合适的正则表达式。使用简单的
\bGO\b
忽略大小写将拆分它。但也会在评论中拆分所有go,如

/*****************************\
sql statement 1
GO
sql statement 2
GO
\****************************/
我的要求是:即使脚本包含GO语句,如果脚本在注释下,也不要拆分脚本。假设我的整个脚本如下所示:

sql statement 1
GO
/*****************************\
sql statement 2
GO
sql statement 3
GO
\****************************/
sql statement 4
预期的输出应该是

First command :
sql statement 1

Second command :

/*****************************\
sql statement 2
GO
sql statement 3
GO
\****************************/
sql statement 4
你知道这件事吗


提前感谢。:)

您可以删除所有注释,然后按
GO
进行拆分:

/\/\**\\[^\\]*?\\\**\//    # match the comment

\/\**\\    # matches /*****\
[^\\]*?    # any text within the comments
\\\**\/    # matches \*****/

删除以上发现并按
GO

分割结果,我认为他需要保留评论中的
GO
s。感谢mishik和Radu的回复。正如Radu提到的,我想用未注释脚本保留注释脚本。例如,如果我有一个脚本来创建一个存储过程或触发器,它可以在脚本中间有一些脚本注释。在运行此脚本以创建存储过程或触发器时,我还应该保留已注释的脚本。我的意思是,一旦在数据库中创建了存储过程或触发器,我应该能够在存储过程/触发器的脚本中看到注释脚本。谢谢