2017-02-22 18 views
0

Я пытаюсь построить регулярное выражение, которое найдет и заменит вхождения определенных квалификаций схемы 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

+0

Вы должны бежать квадратные скобки, поскольку они являются особенными в регулярных выражениях. – Toto

+1

Вы считаете 'database.dbo.table_name]' действительным? –

+0

Да, это было бы неверно @SahilGulati. Более глупые выражения поймут эту проблему. Хотя в моем случае это не произойдет, потому что скрипты хранятся в процедурах, которые ** уже находятся в SQL Server ... Собственная проверка ошибок даже не позволит вам создавать или изменять хранимую процедуру с этим сценарием **. .. Я уверен, что он по-прежнему будет полезен для общего случая, хотя – user919426

ответ

1

Вы должны избегать квадратных скобок, поскольку они являются специальными в регулярном выражении.

И группы излишни, ваше регулярное выражение становится:

\[?database\]?\.\[?dbo\]?\.\[?table_name\]? 
+0

Спасибо! Так оно и было. – user919426

+0

Вы также можете добавить '\ s' (или что-то лучше), что полезно, если вы уже сделали предыдущий поиск и не захотите, скажем, найти и заменить на уже замененную строку ... в моем случае я был префикс всей квалификации схемы с именем сервера для сценария связанного сервера – user919426

+0

Этот ответ соответствует недопустимой последовательности. database.dbo.table_name] –

 Смежные вопросы

  • Нет связанных вопросов^_^