代码之家  ›  专栏  ›  技术社区  ›  Daniel

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

  •  0
  • Daniel  · 技术社区  · 15 年前

    可以使用正则表达式匹配以下所有T-SQL变量名 declare 声明?

    在下面,我想匹配 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))
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   CodingGorilla    15 年前

    以下是我的想法,我将其简化了一点(去掉了所有特定的数据类型),但您可以根据自己的喜好进行修复:

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

    关键是第一部分,你要找关键字“declare”或“a”,这些都是你的分隔符。从技术上讲,这意味着它也可以与以下内容相匹配:

    @var1 int,
    @var2 int,
    @var3 int
    

    但无论如何,因为这将是无效的T-SQL,所以我放弃了它。