使用模式替换文件

使用模式替换文件

我偶尔使用正则表达式,但我对它们的了解还不够深入。

我在几个文件中都有以下文本:

IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE object_id=OBJECT_ID(N'[dbo].[B]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[B]
GO
CREATE PROCEDURE [dbo].[A] ...

每个文件都发生更改,前三行被插入(在文件中替换)。

我想要实现的是让每个文件上的 B 都变成 A。例如:

"blah blah [B] more blah [A1]" => "blah blah [A1] more blah [A1]"
"blah blah [B] more blah [A2]" => "blah blah [A2] more blah [A2]"
...
"blah blah [B] more blah [An]" => "blah blah [An] more blah [An]"

有人知道这是否可行以及如何做到吗?

谢谢。

编辑。我​​忘了说,上述文本前后还有其他几行代码,每个文件都不一样。这不是文件中唯一的文本。

答案1

您需要一个反向引用:

匹配: ([A-Za-z0-9\s]+) \[\w+\] ([A-Za-z0-9\s]+) (\[\w+\])

代替: \1 \3 \2 \3

括号捕获其内容,\n 播放它。 [A-Za-z0-9\s]+应该匹配大多数 SQL 语句,并且\[\w+\]应该匹配方括号中的位。

答案2

通过使用反向引用和匹配表达式的分解,我得到了一个可行的解决方案,虽然它很大而且很丑,但却能完美地完成工作:

匹配:(IF EXISTS \(SELECT TOP 1 1 FROM sys\.objects WHERE object_id=OBJECT_ID\(N'\[dbo\]\.)(\[\w+\])('\) AND type in \(N'P', N'PC'\)\)\r\n DROP PROCEDURE \[dbo\]\.)(\[\w+\])(\r\nGO\r\nCREATE PROCEDURE \[dbo\]\.)(\[\w+\])

代替:$1$6$3$6$5$6

相关内容