2012-03-05 47 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,所以我不能进一步测试。