正则表达式以匹配T-SQL变量声明

时间:2010-11-09 15:35:09

标签: c# .net regex

是否可以使用正则表达式匹配declare语句后的所有T-SQL变量名?

在下文中,我想匹配Var1Var2Var3。我不想匹配以后对这些变量的引用。

declare
    @Var1 datetime,
    @Var2 int,
    @Var3 varchar(max)

我一直在使用RegexBuddy工作一段时间,似乎无法正确使用它。我开始怀疑它是否可能。

修改

这是我到目前为止所得到的。它只匹配第一个变量。我无法弄清楚如何匹配后续的。

(?i:declare)\s+
(?:@([\w@$#]+)\s+(?:bigint|int|smallint|tinyint
|(?:(?:decimal|numeric)(?:\s*\(\s*\d+(?:\s*,\s*\d+)\s*\))?)
|money|smallmoney
|(?:(?:float|datetime2|datetimeoffset|time|char|varchar|nchar
|nvarchar|binary|varbinary)(?:\s*\(\s*\d+\s*\))?)
|real|date|smalldatetime|datetime|text|ntext|image
|uniqueidentifier|xml))

1 个答案:

答案 0 :(得分:2)

这是我提出的,我简化了一点(摆脱了所有特定的数据类型),但你可以按照你喜欢的方式修复它:

(?i:declare|,)\s+?(?:(?<var>@[\w@$#]+)\s+(?<type>[\w()]+))+

关键是第一部分,你想要寻找关键字“declare”或“,”这些将成为你的分隔符。现在技术上这意味着它也会匹配这样的东西:

@var1 int,
@var2 int,
@var3 int

但是因为无论如何这都是无效的T-SQL,我放手了。