2010-11-09 49 views
0

使用正則表達式來匹配declare語句後的所有T-SQL變量名是否可能?正則表達式與T-SQL變量聲明相匹配

在下面,我想匹配Var1,Var2Var3。我不想匹配稍後對這些變量的引用。

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

我一直在使用RegexBuddy工作一段時間,似乎無法做到正確。我開始懷疑是否有可能。

編輯

這裏就是我這麼遠。它只匹配第一個變量。我無法弄清楚如何匹配後續的。

(?i:declare)\s+ 
(?:@([\[email protected]$#]+)\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)) 

回答

2

這就是我想出了,我簡化了一點(擺脫了所有的特定數據類型),但您可以修復它,你怎麼樣:

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

的關鍵是第一部分,你想尋找關鍵詞「申報」或「,」這些將成爲你的分隔符。現在techinically這意味着它也將匹配是這樣的:

@var1 int, 
@var2 int, 
@var3 int 

但由於這將是無效的T-SQL反正,我讓那去。

+1

這不是原來的問題的一部分,但我做了一些改變,所以它匹配具有多個「參數」的類型 - 例如:小數(9,2) - 你的做法。 '(?i:declare |,)\ s +(?:(?:@(? [\ w @ $#] +))\ s +(? \ w +(?:\ s * \([^)] + \))?))+' – Daniel 2010-11-09 17:16:25

+0

好的補充,我沒有想到! – CodingGorilla 2010-11-09 17:25:12

+0

感謝您的幫助! – Daniel 2010-11-09 17:31:14