Как новичку разобраться в регулярных выражениях

Раньше из регулярных выражений я использовал только (.*) :) Несколько друзей настоятельно советовали мне разобраться в этом вопросе. Но не понимая, где их можно применять, я откладывал это до лучших времен.

Все изменилось, когда мне пришлось более плотно работать с Google Analytics и Google Tag Manager в Netpeak. Без понимания регулярных выражений сложно представить себе нормальную настройку фильтров, пользовательских сегментов в GA или правил в GTM.

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

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

Регулярные выражения (regular expressions, RegExp) — наборы символов, применяемых для поиска текстовых строк, соответствующих требуемым условиям. Результат применения регулярного выражения — подмножество данных, отобранное согласно логике, заложенной в выражении. Регулярные выражения применяются в любых задачах по поиску в множестве данных, для которых нужно получать выжимку по определенным правилам.

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

Большинство символов в регулярных выражениях представляют сами себя, за исключением группы специальных символов «[ ] / ^ $ . | ? * + ( ) { }». Если эти символы нужно представить в качестве символов текста, их следует экранировать обратной косой чертой «».

Если эти спецсимволы встречаются без обратной косой черты, значит у них особенные значения в регулярных выражениях:

  • «^» — каретка, циркумфлекс или просто галочка. Начало строки;
  • «$» — знак доллара. Конец строки;
  • «.» — точка. Любой символ;
  • «*» – знак умножения, звездочка. Любое количество предыдущих символов;
  • «+» – плюс. 1 или более предыдущих символов;
  • «?» – вопросительный знак. 0 или 1 предыдущих символов;
  • «( )» – круглые скобки. Группировка конструкций;
  • «|» – вертикальная линия. Оператор «ИЛИ»;
  • «[ ]» – квадратные скобки. Любой из перечисленных символов, диапазон. Если первый символ в этой конструкции – «^», то массив работает наоборот – проверяемый символ не должен совпадать с тем, что перечислено в скобках;
  • «{ }» – фигурные скобки. Повторение символа несколько раз;
  • «» – обратный слеш. Экранирование служебных символов.

Также существуют специальные метасимволы, ими можно заменить некоторые готовые конструкции:

  •  — обозначает не символ, а границу между символами;
  • d — цифровой символ;
  • D — нецифровой символ;
  • s — пробельный символ;
  • S — непробельный символ;
  • w — буквенный или цифровой символ или знак подчеркивания;
  • W — любой символ, кроме буквенного или цифрового символа или знака подчеркивания.

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

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

1. Изучаем регулярные выражения в текстовом редакторе

Почти всем новичкам я сразу рекомендую ставить текстовый редактор NotePad++ и начинать тренироваться в нём. Почему именно в этом текстовом редакторе:

  • в большинстве случаев спецсимволы не нужно экранировать;
  • Notepad++ сохраняет конструкции предыдущих запросов;
  • функция «Пометки» наглядно показывает результат поиска по заданной конструкции и позволяет быстро внести правки:

2. Проверяем знания регулярных выражений в Regex

Онлайн-сервис regex101.com позволяет ввести набор данных и регулярное выражение. После этого в наборе данных подсветятся строки, соответствующие выражению. В специальном окне Explanation регулярное выражение разбирается по частям:

Давайте потренируемся: задача — подсветить всю строку полностью. Нужно поставить галочку напротив «multi line».

Тестовые данные:

https://www.site.ua/www.site.com/search?q=widget+thinger
https://www.site.com/page1/page2/page3/https://www.site.com/index.php
https://www.site.com/products/100.php
https://www.site.us/products/101.php
https://www.site.com/products/102.php
https://www.site.ua/duals/index.html
https://www.site.com/ourteam/index.phphttps://www.site.com/
https://site.com/profilehttps://www.site.ru/ua/index.php
https://www.site.com/ua/producty/100.php
https://www.site.com/ua/producty/101.php
https://www.site.com/ua/producty/102.php
https://1.site.com/search?q=widget
https://www.site.com/search?q=widget+thinger
https://www.site.com/search?q=smidges
https://www.site.com/index/yy.jpg

Регулярные выражения для проверки знаний:

  • выбрать все страницы;
    • (.*) — любое количество любых символов;
  • выбрать все страницы с https;
    • ^https.* — все URL, начинающиеся с https;
  • все страницы на украинском языке;
    • .*/ua/.* — все страницы, в URL которых содержится /ua/. Если использовать просто ua, в выборку попадет https://www.site.com/duals/index.html, это лишнее;
  • все индексные страницы;
    • .*index.(php|html) — аналогично прошлому выражению, нельзя просто использовать index;
  • все карточки товаров (для русской и украинской версий);
    • .*product(s|y).* или .*product[sy].* — оба варианта подходят.

3. Тестируем регулярные выражения с помощью Jsfiddle

Jsfiddle — инструмент для экспериментов с JavaScript. В нем можно проверить условия для запуска функции или демонстрации нужных результатов.

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

4. Проверяем ошибки в регулярных выражениях с помощью Google Analytics

Самый быстрый способ проверить знания о регулярных выражениях в Google Analytics — фильтры в стандартных отчетах. Зайдите в свой аккаунт и в любом отчете, где доступны фильтры, попробуйте отобрать какой-либо набор данных.

5. Нестандартные методы освоения регулярных выражений

Для тех, кто любит интерактив:

Жадные и ленивые кванторы

Кванторы в регулярных выражениях позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. «Жадный» квантор старается захватить наибольший кусок текста, который только может. А «ленивая» версия (добавляется символ-модификатор «?») ищет наименьшее из возможных вхождений.

Жадный квантор (*) захватывает все — от первых кавычек до последних:

Ленивая версия квантора (*?) ищет наименьшее совпадение, поэтому найдет каждую подстроку по отдельности:

Где использовать регулярные выражения

SEO-специалисты прибегают к регулярным выражениям при работе с Google Analytics, RewriteRule в .htaccess, в текстовых редакторах, при работе с краулерами (Netpeak Spider).

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

1. Выделить всё, кроме домена:

.*://|/.*

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

2. Выделить URL заданной вложенности:

.*://site.com/.*?/.*?/.*?/

Здесь конструкция (/.*?/) обозначает один уровень вложенности.

Использую это выражение, когда нужно задать максимально разрешенную вложенность URL при сканировании сайта в Netpeak Spider.

Чтобы просканировать все URL адреса только первого уровня вложенности, в сервисе нужно задать такие настройки:

Что еще почитать о регулярных выражениях

Выводы

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

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

Набросаем любимых регулярных выражений в комментариях?

Узнайте больше
285
238
11
Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.