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

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

Итак, перейдем сразу к делу: Как включить поиск по регулярному выражению в notepad++? К счастью, тут все просто. Нужно нажать ctrl + F (как и для обычного поиска) и во всплывшем окне переключиться в режим «регулярное выражение» (см. скриншот ниже).

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

  1. ^ — Символ начала строки
  2. $ — Символ конца строки
  3. . (Точка) — один любой символ
  4. [0-9] — любая цифра
  5. [a-z] — любой символ латинского алфавита в нижнем регистре
  6. [A-Z] — любой символ латинского алфавита в верхнем регистре
  7. [a-zA-Z] и (эквивалент) [a-Z] — любой символ латинского алфавита в любой регистре
  8. \s — символ пробела
  9. \S — (обратно предыдущему) не пробел
  10. \w — любая цифра, буква или подчеркивание
  11. \d — любая цифра
  12. \D — (обратно предыдущему) любой символ, но не цифра
  13. * — Повтор предыдущего символа. То есть символ перед звездочкой может повторяться 0 и более раз. Например: .* — представляет собой абсолютно любой набор символов
  14. \n — символ новой строки

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

Надобность в в применении регулярных выражений может возникнуть тогда, когда нужно обработать большой массив текстовой информации для того, чтобы найти схожие, но не идентичные фрагменты текста. Например: очистить текст от html-тегов, удалить простейший числовой ряд (на каждой строке до или после текста работает «счетчик», в котором число возрастает на +1), приведение дат к единому формату и тому подобные ситуации. Как ни странно, необходимость прибегнуть к регулярным выражениям может возникнуть не только у программиста, но и у маркетолога, например если требуется «выдернуть» какую-либо информацию из xml-фида данных.

Итак, рабочие ситуации:

Как удалить  tррabs с разными url?
tppabs — это специфический атрибут, который добавляет «программа-грабилка» teleport pro при «скачивании» какого-либо сайта. В коде страницы атрибут выглядит следующим образом: tppabs=»http://example.ru/img/112″
Для удаления таких тегов подойдет следующее регулярное выражение:
tppabs=»(.+?)»
Заменить на пустое значение (или пробел, в зависимости от ситуации).

Как удалить строку с числовой последовательностью?
Есть большой массив данных, каждая строка в которой начинается с текста «Line (1…100000):
Цель — удалить эти символы и не трогать остальные данные. Такая ситуация может возникнуть, когда был сделан поиск в Notepad++ по большому файлу, а далее результаты были скопированы в новый файл. Естественно, от этих Line следует избавиться как можно скорее.
Для этого подойдет следующее регулярное выражение:  .*Line.[0-9]*: (.* Добавлены на случай, если перед Line стоят символы табуляции, что очень вероятно).

Как обернуть в кавычки текст на каждой строке?
Например, есть большой массив ключевых слов. Каждая ключевая фраза расположена на отдельной строке и каждую ключевую фразу нужно обернуть в кавычки. Для этого подойдет следующее регулярное выражение: ^(.*)$
Стоит учесть:  в строке «Заменить на» надо написать следующее: «\1» (\1 в данном случае возвращенное поиском значение, уникальное для каждой строки, если написать в «заменить на» — «^(.*)$» (именно в кавычках, то все строки заменятся именно на «^(.*)$»).

Как найти пустые строки с помощью регулярного выражения?
Для этого может подойти одно из двух регулярных выражений:
А) \n\r  и если не помогает, то:
Б) ^\s*$ 

Как заменить один html-тег на другой?
Может возникнуть ситуация, когда определенные теги, которыми обернут текст, нужно заменить на другие (например, тег p заменить на div). Для этого подойдет следующее регулярное выражение: <span>(.*)</span> и соответственно,  в «заменить на» нужно прописать: <div>\1</div>

Как удалить всё после определенного символа?
Пример получился довольно отвлеченный: В файле нужно удалить в каждой строке все символы, которые идут после слова php (К слову, может пригодиться, если нужно удалить utm-метки из массива url). Для этого подойдет выражение следующего формата:
(.*)php(.*) и в «заменить на» указать \1

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

Обработка больших объемов текстовых данных по определенному шаблону для экономии времени