Регулярные выражения в текстовом редакторе Notepad++

В посте поведаю про особенности использования регулярных выражений (regexp) в популярном текстовом редакторе для программистов Notepad++. Думаю стоит об этом рассказать т.к. текстовый редактор накладывает свои правила на пользование регулярными выражениями. Стоит заметить что в Notepad++ эта функция довольно хорошо развита, поэтому пользоваться ей порой очень удобно ибо она позволяет сократить время работы во много раз.

Понятное дело, что многие программисты и обычные пользователи используют программу notepad++, которая является мощным текстовым редактором с поддержкой регулярных выражений, но у русских пользователей случаются проблемы при использовании этого мощного инструмента. В рунете, увы, совсем не много информации о регулярных выражениях в notepad++.

Для начала давайте разберёмся что же такое регулярные выражения. Да, я знаю, что если вы читаете эту статью, то скорее всего уже с ними знакомы, но я всё же напишу пару слов об этом.

Что такое регулярные выражения?

Регулярные выражения это формальный язык шаблонов для поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. По сути, регулярное выражение это всего лишь строка-образец (шаблон), которая состоит из символов и метасимволов, которые и задают конкретное правило поиска.

Регулярные выражения в Notepad++

Регулярные выражения в редакторе notepad++ практически ничем не отличаются от оных в современных языках программирования, поэтому если вы уже работали с регулярными выражениями, то вас не должен смущать факт, что вы используете их в другой среде.

Как использовать регулярные выражения в Notepad++

Для использования регулярных выражений в Notepad++ просто откройте нужный документ в этом редакторе и нажмите комбинацию горячих клавиш Ctrl+F. Откроется окно поиска (find) с полем для поиска с названием «Найти». В нём и нужно писать искомый текст, в том числе и регулярные выражения. Однако, для того, что бы редактор перешёл в режим работы с регулярными выражениями нужно в этом же окне, внизу, в поле «Режим поиска» выбрать пункт «Регулярные выражения». Всё готово для работы!

Естественно работать с регулярными выражениями можно и не только в режиме поиска, но и в режиме замены (вкладка «заменить»). При этом, в режиме замены можно так же использовать и переменные для постановки, очень удобная вещь.

Естественно подробно объяснять суть работы с регулярными выражениями я в этой статье не буду ибо это совсем отдельная большая тема, вы должны это понимать. Для тех кто не знает, что это такое или мало знаком с регулярками могу посоветовать почитать пост о регулярных выражениях хоть и тут же, на моём блоге.

Скажу лишь только, что редактор Notepad++ использует perl-подобные регулярные выражения и в нём полностью реализован весь их функционал, т.е. в «нотпаде++» работает абсолютно всё, что и должно по спецификации регулярных выражений PERL.

Упомяну чуть про механизм подстановки переменных в Notepad++, т.к. это достаточно «глубокая» тема в регулярных выражениях и не каждый про это знает. Механизм подстановки переменных в Notepad++ точно такой же как и в rexexp PERL. Т.е. всё, что заключается в группировку (круглые скобки) помещается в переменные к которым можно получить доступ с помощью соответствующих обращений $1$9, \1\9. Таким образом, подводя итог, всё, что заключено в круглые скобки ( и ) будет захвачено и «положено в карман», из которого что-то достать можно с помощью обращения $1, $2 и т.д (либо \1, \2). В карман попадают скобки не по уровню вложенности, а по порядку открытия, т.е. первой переменной будет не самая «глубокя» скобка, а именно скобка которая идёт первой от начала строки регулярного выражения и так по возрастающей.

Примеры применения регулярных выражений

ОК, как работать с «регулярками» в этом редакторы мы разобрались, теперь, собственно, переходим к самим регулярным выражениям, точнее к примерам. Далее будем просто рассматривать конкретные примеры применения регулярных выражений, я выбрал самые популярные действия.

Очистка html кода от ссылок

Рассмотрим способ с помощью которого можно быстро очистить html код документа от всех внешних ссылок, при этом сохранив в тексте документа слова-анкоры, те слова, которые заключены в теги ссылок. Для этого просто помещаем html код в редактор (или открываем сохранённый документ), нажимаем на Ctrl+F, переходим на вкладку «Заменить», выбираем режим поиска «Регулярные выражения» и пишем само регулярное выражение в поле поиска:

(.*)

Далее в поле замены (с названием «Заменить на:») пишем следующее:

\1

И нажимаем на кнопку «Заменить всё». После этого, мгновенно, все теги ссылок из html кода исчезнут а слова, которые были ссылками, останутся на месте, всё потому, что мы с помощью круглых скобок в переменную \1 сохраняем всё найденное и после, на место найденного шаблона в тексте просто подставляем переменную из регулярного выражения — анкор ссылки.

Смена атрибута href ссылок в html коде

Например, вам нужно оставить ссылки в html коде текст и лишь только сменить атрибут href на свои значения. Откройте документ в notepad++ и нажмите Ctrl+F, щёлкните на вкладку «заменить» и выберите внизу радио кнопку «регулярные выражения». В поле «Найти» впишете строку:

(href="http://).*"

Заменить на:

\1_моя_ссылка_без_указания_протокола

Смена атрибута href ссылок в html коде и создание редиректа

Хотим оставить ссылку, но переход по ней сделать через свой редирект.

В «Найти» пишем:

href=.(http://[^'"]*).

В поле «Заменить на» скопируйте следующее:

href="/redirect.php?to=\1"

Естественно название скрипта (в примере выше это redirect.php) пишем своё.

В примере выше наша задача – взять URL’ы всех ссылок для преобразования. Мы знаем, что URL находится в атрибуте href тега a и заключен в кавычки (одинарные, либо двойные). В примере строка href= представляет сама себя, то есть парсер будет искать именно эти символы, это не мета-символы. За знаком равенства идёт точка, которая является метасимволом и в регекспах может означать любой символ, так мы учитываем тот факт, что кавычки могут быть двойные или одинарные – регулярка всё равно будет работать как нужно. Круглые скобки означают группу символов и сохранение в переменной, т.е. это то, что будет найдено по шаблону который описан внутри скобок мы можем использовать в шаблоне замены (\1 – это и есть эта извлечённая по шаблону подстрока; групп может быть сколько угодно и их нумерация начинается с единицы). В круглых скобках находятся символы http://, они опять же представляют сами себя. В квадратных скобках находится набор символов, которые нужно искать, однако в нашем случае нам нужно искать до первой кавычки, и мы можем не перечислять все символы кроме кавычек, а использовать знак исключения ^. [^'»] – означает, что нам подходит любой символ, кроме и «. Звёздочка за скобками означает, что предыдущий набор может повторяться сколько угодно раз. Точка за круглыми скобками означает любой символ, это будет кавычка или апостроф. Обратите внимание, точка находится ЗА скобками и кавычка не войдёт в группу символов \1. Все ссылки превратятся в ссылки с скриптом редиректа.

На этом всё, благодарю за внимание.