Введение
Наверняка любой, даже самый непродвинутый пользователь ПК, умеет осуществлять поиск и замену строк к тексте. В общем случае необходимо указать строку, которую нужно заменить, и строку, на которую будет производится замена. Этого достаточно для достижения самых простых целей. Но иногда хочется большего — не просто заменить, а, например, изменить структуру строк.
Более сложная цель
Рассмотрим задачу, с которой я столкнулся в процессе своей работы. Мне кажется этот пример в достаточной мере раскрывает суть текущей темы.
Итак, в процессе разработки программного обеспечения, у меня появилась необходимость добавить в таблицу базы данных большое количество записей. Структура таблицы следующая:

В качестве исходных данных мне предоставили текстовый файл вида:
FirstBackordered = 38,SecondBackordered = 39,ThirdBackordered = 40,FirstCreditCardDeclined = 41,SecondCreditCardDeclined = 42,ThirdCreditCardDeclined = 43,FirstPayPalDeclined = 44,SecondPayPalDeclined = 45,ThirdPayPalDeclined = 46,FirstDeclinedCreditCardBackordered = 47,SecondDeclinedCreditCardBackordered = 48,ThirdDeclinedCreditCardBackordered = 49,FirstDeclinedPayPalBackordered = 50,SecondDeclinedPayPalBackordered = 51,ThirdDeclinedPayPalBackordered = 52Похоже на выдержку из перечисления (enum), правда? Добавить несколько записей в такую таблицу не составит труда. А если таких записей 1000+? Согласитесь, вручную добавлять каждую совсем нет желания. К тому же обновлять т��блицу нужно было и локально, и на тестовом сервере заказчика (а в будущем и на живом сервере тоже). Поэтому целесообразно написать SQL-скрипт. Причём можно заставить текстовый редактор написать его за меня!
Цель
Итак, задача заключается в том, чтобы каждую строку исходного текста преобразовать в SQL-запрос, который бы выполнял INSERT записи в нужную таблицу. Например:
FirstBackordered = 38,необходимо преобразовать в:
insert into [LPEmail].[dbo].[EMAIL_TYPE]
values (
38, 'FirstBackordered', 'D:\Websites\LeisurePro\XslFiles\LP_BO\FirstBackordered.xslt', 'D:\Websites\LeisurePro\XslFiles\LP_BO\FirstBackordered.xslt', 1, 1
);
Выполнить это можно в любом текстовом редакторе, который поддерживает поиск и замену по регулярному выражению, такие как Notepad++, Visual Studio, SQL Management Studio и др. Учтите, что формат регулярного выражения может отличаться в различных программах. В этой статье рассматривается поиск и замена текста в программных продуктах Microsoft.
Решение
Итак, напишем регулярное выражение для поиска строк в исходном текстовом файле:
^{:w}:Zs:Sm:Zs{:d:d},*$^ — Начало строки. Совпадает с вхождением, только если оно находится в начале строки текста, в котором производится поиск;
:w — Любая строка букв. Совпадает с выражением ([a-zA-Z]+);
:Zs — Совпадает с пробелом;
:Sm — Математический символ. Совпадает с +, =, ~, |, < и >;
:d — Десятичная цифра. Совпадает с выражением ([0-9]);
$ — Конец строки. Совпадает с вхождением, только если оно находится в конце строки текста, в котором производится поиск.
В режиме Найти и заменить фигурные скобки ({}) употребляются для выражений с тегами. По такому регулярному выражению будет найдена каждая строка в исходном текстовом файле. Тегами мы сделали название (например, FirstBackordered) и номер (38). Заключенные в фигурные скобки выражения в дальнейшем можно использовать в поле «Заменить на» — \1, \2, \3 и т.д. Напишем выражение, на которое хотим заменить найденные строки:
insert into [LPEmail].[dbo].[EMAIL_TYPE]\nvalues (\n\t\2, '\1', 'D:\\Websites\\LeisurePro\\XslFiles\\LP_BO\\\1.xslt', 'D:\\Websites\\LeisurePro\\XslFiles\\LP_BO\\\1.xslt', 0, 1\n);Как видите, используются теги \1 и \2, причём неоднократно. Эти теги заменяются на реальные подстроки, найденные в строке по регулярному выражению.
Заключение
В итоге, нажав кнопку «Заменить все» мы экономим массу времени и повышаем чувство собственного величия :D

Спасибо за внимание. Надеюсь помогу кому-нибудь избежать скучной конвеерной работы.
