SQL Server Management Studio的完整正则表达式语法

12

SQL Server Management Studio中使用的正则表达式语法是否有完整的描述?例如,一定有一种方法可以执行负向先行断言,但查找/替换对话框没有列出它。

2个回答

6

SSMS使用的正则表达式实现与Visual Studio和.NET Regex类中使用的实现非常不同。

可以在MSDN上找到其完整功能及其相应语法的列表,点击此处可查看

即使有关它怪异方言的正则表达式文档,您可能会发现它的功能集相当缺乏。 (例如:它不支持基本操作符如“?”,也不支持实用的高级操作如正向前瞻。)您可以使用以下语法进行负向前瞻:

Prevent match    ~(X)    Prevents a match when X appears at this point in the
                         expression. For example, real~(ity) matches the "real" 
                         in "realty" and "really," but not the "real" in "reality."

我发现奇怪的SSMS方言唯一的好处是它包含了许多其他引擎中没有的内置字符类。
例如:

Math symbol       :Sm   Matches +, =, ~, |, <, and >.
Currency symbol   :Sc   Matches $ and other currency symbols.

已经在其他地方使用正则表达式的注意事项:

实际上,除非您打算大量使用其中包含的自定义组,否则学习这种奇怪的Regex方言可能不值得您花费时间。将您的查询复制到具有更标准实现的编辑器(如Visual Studio 2012或更高版本、Notepad++等)中,效果会更好。


6

SSMS 2005-2012版本实际上只是修改/定制的Visual Studio Shell(2005-2010)环境,因此适用于此Visual Studio(2005-2010)正则表达式参考:

http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.80).aspx

Visual Studio 2012及更高版本已切换到标准的.NET正则表达式。

但是,SSMS直到SSMS 2016才跟随并采用标准正则表达式。


3
我知道这是一个旧帖子,但是对于Visual Studio 2012及更高版本,这个答案是错误的。SSMS中的正则表达式不再与Visual Studio中的正则表达式相同。(Visual Studio放弃了它古怪的方言,采用了更标准的实现方式。但SSMS没有做出相应改变。)我已经发布了一篇针对最新版本SSMS有关的回答。 - SvdSinner
感谢@SvdSinner,更新了答案以更准确地反映VS shells的持续演变。如果您恰好知道SSMS 2014的情况,请编辑答案或留下另一条评论,以便我进行修复! - Tao
SSMS 2014仍然使用旧的古怪实现方式。对于SSMS 2016没有任何想法。 - wqw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接