我有数千个 *.sql 文件,它们都包含不同格式的 T-SQL 文本,我想匹配这些文件中的所有模式名称和对象名称。
我已经分离了以下可能的模式名称 + 对象名称格式
- dbo.[MainPart.SubPartA.SubPartB.SubPartC]
- [dbo].[MainPart.SubPartA.SubPartB.SubPartC]
- specialschema.[MainPart.SubPartA.SubPartB.SubPartC]
- specialschema.MainPart
- [MainPart.SubPartA.SubPartB.SubPartC]
我已经创建了一个正则表达式来匹配前四种情况
(\[{0,1}(?<schema>\b\w*?\b){0,1}\]{0,1}\.){0,1}\[{0,1}(?<object>(\w|\.)+)\]{0,1}
它将为每场比赛创建两组“模式”和“对象”。
问题是最后一种情况表明 schema=" MainPart " 和 object=" SubPartA.SubPartB.SubPartC "
此时我正在考虑将正则表达式分成几个部分以使其更简单(并且更具可读性),因为我已经有了匹配项,只有组不正确。
或者是否有另一种正则表达式技术可以为所有五个案例获取正确的组(并且仍然保持甚至提高可读性)?
SQL 文件的示例:
/******************************************************************
Comment block
******************************************************************/
CREATE PROCEDURE [MainPart.SubPartA.SubPartB.SubPartC]
@Param INT = NULL
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.[Table] WHERE fldParam = @Param
SET NOCOUNT OFF
END
GO