Я пытаюсь построить регулярное выражение, которое найдет и заменит вхождения определенных квалификаций схемы SQL в более чем 100 файлах SQL ,Регулярное выражение для соответствия необязательным тегам (sqaure brackets) ... (найти и заменить в SQL-запросах, Notepad ++)
Исходные файлы могут содержать квалификацию схемы, которые могут (необязательно) имеют квадратные скобки ('['
и ']'
) или нет. Например, файл сценария может содержать:
[database].[dbo].[table_name]
или
database.[dbo].[table_name]
или
database.dbo.[table_name]
и все возможные комбинации ...
я написал что-то вроде этого:
([)?database(])?\.([)?dbo(]?)\.([?)table_name(]?)
Not really working (regex101)
Update (с раствором на основе ответа):
расширения на основе @ выбран ответ Тото ниже, с добавлением возможного псевдонима таблицы, чтобы соответствовать следующим строкам и предоставления космические префиксы и суффиксы
database.dbo.table_name tn
(\s+)(\[)?database(\])?\.(\[)?dbo(\]?)\.(\[?)table_name(\]?)((\s+)(tn))?(\s+)?
https://regex101.com/r/Rz9MLB/7
Вы должны бежать квадратные скобки, поскольку они являются особенными в регулярных выражениях. – Toto
Вы считаете 'database.dbo.table_name]' действительным? –
Да, это было бы неверно @SahilGulati. Более глупые выражения поймут эту проблему. Хотя в моем случае это не произойдет, потому что скрипты хранятся в процедурах, которые ** уже находятся в SQL Server ... Собственная проверка ошибок даже не позволит вам создавать или изменять хранимую процедуру с этим сценарием **. .. Я уверен, что он по-прежнему будет полезен для общего случая, хотя – user919426