Регулярные выражения для интернет-маркетинга

05.11.2020
Содержание
Введение

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

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

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

https://regex101.com/ — сайт, на котором можно проверить свое регулярное выражение. В статье я привожу скриншоты с работой регулярок с этого сайта.

Сразу предупрежу, что в статье я описываю не все возможности регулярных выражений. Каждое из приведенных мною выражений можно оптимизировать и сократить.

Но именно в таком формате, по-моему, тема регулярных выражений должна быть максимально понятна для новичков.

Синтаксис регулярных выражений

В интернете есть большое количество статей по регуляркам. Многих новичков такие статьи пугают своими размерами, обилием новых терминов, символов и сокращений.

На самом деле, большая часть регулярных выражений - это синтаксический сахар. Он делает работу с регулярными выражениями удобнее. Но обращать внимание на такой сахар стоит уже после того, как освоился с ядром. Само “ядро” регулярок состоит из 5 простых правил.

Синтаксический сахар (англ. syntactic sugar) в языке программирования — это синтаксические возможности, применение которых не влияет на поведение программы, но делает использование языка более удобным для человека. Источник Wikipedia.

Сразу предупрежу, что изначально регулярные выражения чувствительны к регистру. То есть буква “а” и буква “А” - это разные буквы. Подробнее о таком поведении, и как его изменить, вы можете прочитать в разделе "Модификаторы".

1. В какой части текста находится искомая подстрока

Для простоты понимания договоримся, что конец текста - это переход на новую строку, а начало текста - это начало строки.

  • Если вы точно не знаете, в какой части находится искомый текст, игнорируем это правило;

  • Если искомый текст надо найти только в начале строки, используйте знак крышечки ^;

  • Если искомый текст надо найти только в конце строки, используйте знак доллара $.

ПРИМЕР: Найдем в тексте слово “яблоко”:

Выражение

Описание

Пример

Скриншот

X

Поиск везде

яблоко

^X

Поиск в начале

^яблоко

X$

Поиск в конце

яблоко$

2. Или, или

Если надо найти подстроку, которая может принимать несколько разных значений, достаточно перечислить все искомые значения в круглых скобках через знак вертикальной черты ( | ).

ПРИМЕР: Найдем в тексте слово “яблоко” или “груша”:

Выражение

Описание

Пример

Скриншот

(X|Y)

Или, или

(яблоко|груша)

3. Проверки

Проверки — это поиск подстроки, с условием, что перед (или после) ней точно должна быть (или не должна быть) другая подстрока. Всего есть 4 типа таких проверок:

  1. Позитивная опережающая проверка — найти X при условии, что за ним следует Y.

  2. Негативная опережающая проверка — найти X при условии, что за ним НЕ следует Y.

  3. Позитивная ретроспективная проверка — найти X при условии, что перед ним находится Y.

  4. Негативная ретроспективная проверка — найти X при условии, что перед ним НЕТ Y.

ПРИМЕР: Найдем в тексте слово “яблоко” с учетом проверок

Выражение

Описание

Что ищем

Пример

Скриншот

X(?=Y)

Найти X при условии,
что за ним следует Y

Сочные яблоки

яблоко(?= сочное)

X(?!Y)

Найти X при условии,
что за ним НЕ следует Y

Не сочные яблоки

яблоко(?! сочное)

(?<=Y)X

Найти X при условии,
что перед ним находится Y

Зеленые яблоки

(?<=Зеленое) яблоко

(?<!Y)X

Найти X при условии,
что перед ним НЕТ Y

Не зеленые яблоки

(?<!Зеленое) яблоко

* Обратите внимание, что в примерах регулярных выражений стоят пробелы. Это важно, так как пробел тоже является знаком.

4. Поиск букв, цифр и символов

Как видно из примеров выше, при помощи регулярных выражений можно искать слова целиком.

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

4.1. Группировки и срезы

Группировка — указание списка (группы) букв, цифр и символов, которые должны присутствовать в искомой подстроке.

Искомая группа объектов перечисляется внутри квадратных скобок [ ].

Например, регулярное выражение [абв37,] найдет в тексте все места, в которых встречаются буквы “а”, “б”, “в” или цифры “3”, “7” или символ запятой “,”.

Если в искомой строке может быть любая буква алфавита или любая цифра, используется срез.

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

Например, регулярное выражение [а-яё] найдет в тексте все места, в которых встречаются буквы от “а” до “я”.

Примеры срезов:

Выражение

Описание

Скриншот

[А-ЯЁ]

Найдет все кириллические буквы в верхнем регистре.

Буква Ё не входит в срез [А-Я], поэтому её необходимо включать дополнительно.

[0-9]

Найдет все цифры.

[a-z]

Найдет все латинские буквы в нижнем регистре.

[А-яA-z0-9,.& ]

Найдет все кириллические и латинские буквы в верхнем и нижнем регистрах, цифры от 0 до 9 и символы запятой, точки, амперсанд и пробел.

4.2. Количество вхождений

Искомые нами подстроки могут содержать определенное количество букв, цифр или символов. Или вообще их не содержать.

И в этом случае регулярные выражения смогут найти то, что нам нужно:

Выражение

Описание

Пример

Скриншот

 

Поиск без оператора

купить грушу и яблоко

X?

Одно или ни одного вхождения

купить грушу( и яблоко)?

X*

Много или ни одного вхождения

купить грушу( и яблоко)*

X+

Одно или много вхождений

купить грушу( и яблоко)+

X{3}

Вхождение 3 раза

а{3}

X{3,6}

Вхождение от 3 и более раз

а{3,6}

X{,6}

Вхождение до 6 раз

а{,6}

4.3. Отрицание

Если необходимо найти подстроки, с учетом, что в них НЕ должны входить какие-то буквы, цифры или символы, достаточно перечислить необходимые символы в группировке, добавив в начале группировки знак крышечки ^.

Выражение

Описание

Пример

Скриншот

[^X]

Найти символы, кроме указанных

[^а]

5. Скрытые символы

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

Кроме пробела есть и другие скрытые символы, которые могут быть найдены.

Символ

Описание

\n

Перенос на новую строку

\r

Возвращение каретки в начало строки. Обычно используется совместно с переносом на новую строку

\t

Табуляция

\

Изоляция символа.

Например, нужно найти подстроку со знаком звездочки. Достаточно искать \*.

.

Любой символ

Модификаторы

Модификаторы (или флаги) — это дополнительные настройки, которые изменяют поведение регулярного выражения.

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

Пример настройки модификаторов в Notepad++.

Модификатор

Отображение

Описание

Пример 

выключенный

Пример 

включенный

Global.

Глобальный поиск

/g

  • С выключенным модификатором останавливается после нахождения первой подходящей подстроки. 

  • С включенным модификатором найдет все вхождения

Multiline.

Мультистроковость

/m

  • С выключенным модификатором концом строки будет считать конец всего текста. А началом строки будет считать начало текста.

  • С включенным модификатором концом строки будет считать перенос на новую строку. А началом текста будет считать начало новой строки.

Case insetsitive

Чувствительность к регистру

/i

  • С выключенным модификатором будет считать буквы в верхнем и нижнем регистре разными символами.

  • С включенным модификатором будет считать буквы в верхнем и нижнем регистре одним и тем же символом.

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

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

Кейс 1

Задача: Есть интернет-магазин. Необходимо получить информацию о количестве товаров в каждом каталоге. Всего на сайте 2500+ каталогов товаров. Информация о количестве товаров выводится на странице каталога в текстовом блоке, которые имеет вид: “Название каталога N”, где N -- это количество товаров.

Решение:

  1. Получаем список всех каталогов с количеством товаров.

    Чайники247

    Заварники8

    Сковороды27

    Грили Test12

  2. Видим что в каталоге может быть количество товаров с числом состоящим от 1 до 3 цифр. А название каталога может содержать кириллические и латинские буквы.

  3. Определяем что количество товаров мы можем получить при помощи регулярного выражения через позитивную ретроспективную проверку + количество вхождений от 1 до 3.

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

Результат

(?<=[А-Яа-яA-Za-z])[0-9]{1,3}

Кейс 2

Задача: Федеральный сайт по продаже специализированного оборудования. Необходимо визуализировать воронку оформления заявки в Google Data Studio.

Решение:

  1. Выгружаем из Google Analytics данные по url из воронки.

  2. Видим, что на некоторых этапах воронки в URL добавляется город посетителя. А на некоторых этапах в URL добавляется название товара.

  3. Добавляем пользовательский параметр с настройкам:

Этап

Пример URL

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

Результат

1. Начало воронки

/order/

\/order\/$

2. Выбор региона

/order/moscow/

\/order\/[A-Za-z]{2,10}\/$

3. Выбор характеристик

/order/moscow/info/

\/order\/[A-Za-z]{2,10}\/info\/$

4. Выбор модели

/order/moscow/info/k-705-wi/

\/order\/[A-Za-z]{2,10}\/info\/[A-Za-z0-9-]{1,20}\/$

5. Завершение

/order/moscow/info/k-705-wi/successful/

\/order\/[A-Za-z]{2,10}\/info\/[A-Za-z0-9-]{1,20}\/successful\/$

Заключение

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

Bonus: Сокращения

Как я говорил в начале статьи, у регулярных выражений есть большое количество синтаксического сахара, который помогает делать сами регулярные выражения короче. Но такие вещи могут путать и пугать новичков. Поэтому привожу примеры сокращений в конце основной статьи.

Описание

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

Сокращение

Найти пробелы, переносы строк или табуляцию

( |\t|\r\n)

\s

Любые символы кроме пробела, переноса или табуляции

[^( |\t|\r\n)]

\S

Любые цифры

[0-9]

\d

Любые символы, кроме цифр

[^0-9]

\D

Любые буквы, цифры и подчеркивание

[A-zА-я0-9_]

\w

Любые символы кроме букв, цифр и подчеркиваний

 

\W


Возврат к списку