是否可以使用正则表达式匹配declare
语句后的所有T-SQL变量名?
在下文中,我想匹配Var1
,Var2
和Var3
。我不想匹配以后对这些变量的引用。
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))
答案 0 :(得分:2)
这是我提出的,我简化了一点(摆脱了所有特定的数据类型),但你可以按照你喜欢的方式修复它:
(?i:declare|,)\s+?(?:(?<var>@[\w@$#]+)\s+(?<type>[\w()]+))+
关键是第一部分,你想要寻找关键字“declare”或“,”这些将成为你的分隔符。现在技术上这意味着它也会匹配这样的东西:
@var1 int,
@var2 int,
@var3 int
但是因为无论如何这都是无效的T-SQL,我放手了。