SQL Server Management Studio/Visual Studio正则表达式错误?
问题描述:
我经常使用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,>)
要改变价值观条款我有以下两个正则表达式:
,[^,]*,\>
\<
两个被替换由一个空字符串删除不需要的文本。第一个去掉逗号,类型,第二个逗号和最后的尖括号。第二个去掉初始角度支架。两者都按预期工作。
但是如果我加入正则表达式成单一表达以加速文本处理,他们选择不同的文本:
(,[^,]*,\>|\<)
第一表达式选择预期的文本。然而,第二个表达式获得第一个尖括号以及前面的逗号。这是正则表达式引擎中的缺陷还是我在这里不理解某些东西?
答
尝试包裹在括号中的第一种选择:
(,[^,]*,\>)|\<
The documentation不表明|
有什么优先,并只给出这个例子:
(sponge|mud) bath
但页面上的其他地方都不同其中|
与其他括号在其他正则表达式中不必要(尽管无害)一起使用的示例:
(("[^"]*")|('[^']*'))
(- [a-z][1-3])|(- [0-9][a-z])
(([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))
所以我猜|
可能比琐碎中,字符串连接sponge
或mud
比更复杂的级联像"[^"]*"
相当高的优先—较低,但较高。 (当然,最后一个表达是由没有注意到.
有特殊含义的人编写的,所以它可能需要一定的盐分。)
因为我没有Visual Studio,所以我不能进一步测试。
你认为你在这里使用什么正则表达方言? VS和SSMS有自己特殊的方言:http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx – Oded 2012-03-05 17:13:55
我的印象是,两者都使用相同的方言。工作表达式在Visual Studio和SSMS中均可用。 Visual Studio和SSMS中的非工作表达式都失败。 – 2012-03-05 17:22:11
我的意思是与.NET不同的方言。 – Oded 2012-03-05 17:23:02