Регулярные выражения соответствуют последним квадратным скобкам в SQL Script SSMS - PullRequest
1 голос
/ 19 октября 2019

Я пытаюсь выполнить сопоставление регулярных выражений в 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 до 03 недель SUM ];поэтому я могу заменить [|] на '

Я пытался

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

И это дает:

enter image description here

, что соответствует полному совпадению, а не групповому совпадению, которое я хочу заменить

Затем я попытался:

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

Но это соответствует одному слишком много (то есть соответствует предпоследнему ].

enter image description here

Я попробовал несколько других вещей безрезультатно.

Поведение, кажется, соответствует в соответствии с использованием PCREPHP на регулярном выражении 101. Пример: здесь , поэтому я добавил этот тег, но у меня недостаточно опыта в этой области, чтобы знать, является ли это допустимым.

Как мне изменить это регулярное выражение, пожалуйста, толькосовпадение в последних скобках?

1 Ответ

2 голосов
/ 19 октября 2019

Вы можете использовать 2 группы захвата и сопоставить [ и ], чтобы их можно было заменить на '

(AS )\[([^\]]+)\]
  • (AS ) Захват группа 1 Совпадение AS
  • \[ Совпадение [
  • ( Захват группа 2
    • [^\]]+ Класс отрицательных символовсовпадать с любым символом 1+ раз, кроме ]
  • ) Закрыть группу
  • \] Совпадение ]

Regex demo

При замене используйте 2 группы захвата

$1'$2'
...