2012-03-05 46 views
2

我經常使用SQL Server Management Studio 10.5編輯器中的正則表達式搜索和替換來清理使用前自動生成的sql。在Visual Studio 2010編輯器中也會出現下述相同的行爲。SQL Server Management Studio/Visual Studio正則表達式錯誤?

我有,我想清理下面的SQL INSERT語句:

INSERT INTO [lttadev].[dbo].[GameInst] 
      ([GameInstId] 
      ,[GameSetId] 
      ,[UserInfoId] 
      ,[GameLevelId] 
      ,[CreatedOn] 
      ,[CreatedBy] 
      ,[ModifiedOn] 
      ,[ModifiedBy]) 
    VALUES 
      (<GameInstId, uniqueidentifier,> 
      ,<GameSetId, uniqueidentifier,> 
      ,<UserInfoId, uniqueidentifier,> 
      ,<GameLevelId, uniqueidentifier,> 
      ,<CreatedOn, datetime,> 
      ,<CreatedBy, uniqueidentifier,> 
      ,<ModifiedOn, datetime,> 
      ,<ModifiedBy, uniqueidentifier,>) 

要改變價值觀條款我有以下兩個正則表達式:

,[^,]*,\> 
\< 

兩個被替換由一個空字符串刪除不需要的文本。第一個去掉逗號,類型,第二個逗號和最後的尖括號。第二個去掉初始角度支架。兩者都按預期工作。

但是如果我加入正則表達式成單一表達以加速文本處理,他們選擇不同的文本:

(,[^,]*,\>|\<) 

第一表達式選擇預期的文本。然而,第二個表達式獲得第一個尖括號以及前面的逗號。這是正則表達式引擎中的缺陷還是我在這裏不理解某些東西?

+0

你認爲你在這裏使用什麼正則表達方言? VS和SSMS有自己特殊的方言:http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx – Oded 2012-03-05 17:13:55

+0

我的印象是,兩者都使用相同的方言。工作表達式在Visual Studio和SSMS中均可用。 Visual Studio和SSMS中的非工作表達式都失敗。 – 2012-03-05 17:22:11

+0

我的意思是與.NET不同的方言。 – Oded 2012-03-05 17:23:02

回答

1

嘗試包裹在括號中的第一種選擇:

(,[^,]*,\>)|\< 

The documentation不表明|有什麼優先,並只給出這個例子:

(sponge|mud) bath 

但頁面上的其他地方都不同其中|與其他括號在其他正則表達式中不必要(儘管無害)一起使用的示例:

(("[^"]*")|('[^']*')) 
(- [a-z][1-3])|(- [0-9][a-z]) 
(([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+)) 

所以我猜|可能比瑣碎中,字符串連接spongemud比更復雜的級聯像"[^"]*"相當高的優先—較低,但較高。 (當然,最後一個表達是由沒有注意到.有特殊含義的人編寫的,所以它可能需要一定的鹽分。)

因爲我沒有Visual Studio,所以我不能進一步測試。