首页 > 解决方案 > 正则表达式匹配 SQL 脚本 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 相匹配。示例:在这里,我添加了该标签,但我在该领域的经验不足,无法知道这是否有效。

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

标签: regexssmspcre

解决方案


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

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

正则表达式演示

在替换中使用 2 个捕获组

$1'$2'

推荐阅读