Regex 使用正则表达式、组捕获和反向引用查找和替换

Regex 使用正则表达式、组捕获和反向引用查找和替换,regex,replace,sql-server-2008-r2,ssms,capturing-group,Regex,Replace,Sql Server 2008 R2,Ssms,Capturing Group,我正在尝试在SQLServer2008R2管理工作室中执行查找和替换操作,并使用组捕获,以便可以在替换中反向引用组。我从SSMS使用的信息中了解到。以下是我的一个例子: SELECT First FROM Table1 SELECT Second FROM Table2 SELECT Third FROM Table3 以下是我的“查找”表达式: SELECT (.+) FROM (.+) \1 \2 以下是我的“替换”表达式: SELECT (.+) FROM (.+) \1 \2

我正在尝试在SQLServer2008R2管理工作室中执行查找和替换操作,并使用组捕获,以便可以在替换中反向引用组。我从SSMS使用的信息中了解到。以下是我的一个例子:

SELECT First FROM Table1
SELECT Second FROM Table2
SELECT Third FROM Table3
以下是我的“查找”表达式:

SELECT (.+) FROM (.+)
\1 \2
以下是我的“替换”表达式:

SELECT (.+) FROM (.+)
\1 \2

但是,运行replace操作不会返回捕获的组,即每行仅为“”(SQL Server Management Studio引擎使用
{
}
来“标记”表达式:

SELECT {.+} FROM {.+}
将此表达式与替换表达式结合使用时,将得到预期结果:

First Table1
Second Table2
Third Table3

解释详细信息。

对于SSM 17和更高版本的
{…}
\1
无效。请使用
(…)
$1

我可能不在这里,但您不应该用$1、$2替换,因为
\1
在正则表达式中反向引用捕获的组,但是替换表达式出于所有目的都是一个新的表达式?不,$1和$2不起作用。它们以文本形式返回,即“$1$2”.那么那是什么风格的正则表达式?有没有提到过它?@roryap我不知道这种特殊风格的正则表达式是否有名字,但我链接的文档页面专门谈到了这种区别:“可以在“查找内容”和“替换为”中使用的正则表达式与在.NET Framework编程中有效的正则表达式之间存在许多语法差异。例如,在“查找和替换”窗口中,大括号{}用于标记要替换的表达式”。您知道如何在SSMS 2016(13.0.14000.36)中实现这一点吗?出于某种奇怪的原因,在SSM中,他们使用$1而不是\1…不确定什么Regex方言来自于…@Wouter-相当一部分现有技术是这样做的,PHP、JavaScript、C#…
\1
等在表达式中用于引用捕获(例如,
([“])。\1
用于匹配
”之间的内容
'
'
但不是
'
),但在替换模式中,通常是
$1
等等。