正则表达式匹配 SQL 脚本 SSMS 中的最后一个方括号

Regex match last square brackets in SQL Script SSMS

我正在尝试在 SQL Server Management Studio 2017 中执行正则表达式匹配,然后对 SQL 脚本的一部分进行替换,如下所示:

,ISNULL([Gt 01 To 02 Weeks SUM 1],0) AS [Gt 01 To 02 Weeks SUM]
,ISNULL([Gt 02 To 03 Weeks SUM 1],0) AS [Gt 02 To 03 Weeks SUM]

我想匹配最后一个 [] 例如使用示例行 [Gt 02 To 03 Weeks SUM];所以我可以用 '

替换 [|]

我试过了

(?<=\sAS\s).*(\[)Gt|SUM(\])

这给出了:

我要替换的是完整匹配而不是组匹配

然后我尝试了:

(?<=\sAS\s).*?(\[)|(?<=\sAS\s)?(\])

但这匹配太多(即它匹配倒数第二个 ]

我尝试了一些其他的东西都无济于事。

行为似乎与在正则表达式 101 上使用 PCRE PHP 匹配。示例:here 所以我添加了那个标签,但我在这个领域没有足够的经验来知道它是否有效。

如何更改此正则表达式以仅匹配最后一个括号?

您可以使用 2 个捕获组并匹配 [] 以便它们可以替换为 '

(AS )\[([^\]]+)\]
  • (AS ) 捕获 组 1 匹配 AS
  • \[ 匹配 [
  • ( 捕获 第 2 组
    • [^\]]+ 否定字符 class,匹配任何字符 1+ 次,除了 ]
  • ) 关闭群组
  • \] 匹配 ]

Regex demo

在替换中使用 2 个捕获组

''