В данной статье рассматривается практическое применение регулярных выражений в Notepad++. Сначала будет кратко рассмотрена общая теория: как включить поиск по регулярному выражению, какой символ за что отвечает, в каких случаях без регулярных выражений не обойтись. Далее будут рассмотрены конкретные ситуации из жизни автора, когда поиск по регулярному выражению оказался прямо-таки спасением ситуации и значительно сэкономил время на рутинные операции.
Итак, перейдем сразу к делу: Как включить поиск по регулярному выражению в notepad++? К счастью, тут все просто. Нужно нажать ctrl + F (как и для обычного поиска) и во всплывшем окне переключиться в режим «регулярное выражение» (см. скриншот ниже).
После этого простого действия, можно в строку «найти» вписывать шаблоны для поиска. Данные шаблоны строятся из набора определенных спецсимволов, которые, для удобства восприятия, разбиты по пунктам:
- ^ — Символ начала строки
- $ — Символ конца строки
- . (Точка) — один любой символ
- [0-9] — любая цифра
- [a-z] — любой символ латинского алфавита в нижнем регистре
- [A-Z] — любой символ латинского алфавита в верхнем регистре
- [a-zA-Z] и (эквивалент) [a-Z] — любой символ латинского алфавита в любой регистре
- \s — символ пробела
- \S — (обратно предыдущему) не пробел
- \w — любая цифра, буква или подчеркивание
- \d — любая цифра
- \D — (обратно предыдущему) любой символ, но не цифра
- * — Повтор предыдущего символа. То есть символ перед звездочкой может повторяться 0 и более раз. Например: .* — представляет собой абсолютно любой набор символов
- \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++) не ограничивается только вышеприведенными примерами, тема эта довольно объемная и интересная, но общий принцип можно описать следующими словами:
Обработка больших объемов текстовых данных по определенному шаблону для экономии времени