Регулярные выражения
16 окт 2019 10:41
Что вообще такое регулярные выражения?
Регулярные выражения - это мощный инструмент для поиска строк в тексте и, возможно, их замены. Например, когда вам нужно заменить все цифры в каком-то тексте, вместо перечисления всех возможных вариантов можно использовать регулярное выражение вида \d+
Кажется, что все просто, но на самом деле это довольно комплексная тема, которую мы попытаемся разобрать простыми словами, а главное, примерами.
Где использовать и как тренироваться?
Мы будем говорить о регулярных выражениях только в рамках сервиса Q-Parser, поэтому если вы матерый программист, скорее всего, вам будет не очень интересно. Тем не менее, примеры будут полезны даже если по ночам вы допиливаете гугл.
На Q-Parser регулярные выражения используются в инструменте Поиск и замена. Не забудьте поставить галочку "Регулярное выражение". Для тренировок достаточно что-нибудь спарсить и тренироваться на этих товарах. Сломать что-то не получится, все изменения можно легко отменить и попробовать еще раз.
Основы синтаксиса
Само по себе регулярное выражение - это набор символов, которые описывают некий шаблон для поиска строки. Однако в отличие от обычного поиска, здесь можно искать различные вариации текста, ограничивать положение строки в тексте или набор конкретных символов.
Любое регулярное выражение заключено в пару символов-разделителей: один в начале, другой в конце. На Q-Parser вы используем прямой слеш (/). Они подставляются автоматически и вводить их не нужно. Напротив, если вы хотите использовать этот символ при поиске, необходимо перед ним поставить обратный слеш (/), т.е. получится такая конструкция: \/
Регулярное выражение так же имеет модификаторы, которые указываются обычно в конце. На Q-Parser это uis. Простыми словами, это означает что поиск будет вестись по всем строкам и без зависимости от регистра символов (БОЛЬШИЕ или мателькие буквы).
В целом любой текст будет являться регулярным выражением. Например, /asd/uis найдет все вхождения в текст символов asd. Но регулярные выражения имеют возможность удобного указания наборов символов. Мы не будем приводить все возможные варианты, их слишком много, но вот некоторые из них:
\d - соответствует любой одной цифре
. - точка соответствует любому одному символу
\w - соответствует любому символу латиницы, цифре или знаку подчеркивания (_)
\s - соответствует любому пробельному символу
^ - соответствует началу строки
$ - соответствует концу строки
Если необходимо найти несколько символов, пользуются следующим приемом:
\d+ - добавление знака плюс (+) соответствует одному или больше символов.
\d* - добавление звездочки (*) соответствует ни одному или больше символов.
\d{3,5} - а так можно указать количество символов от 3 до 5, например.
Можно задать набор символов через квадратные скобки:
[123] - это будет соответствовать одному 1 или 2 или 3, но только одному из символов.
[123]+ - а это уже будет соответствовать нескольким символам, например 123321
[^123] - если поставить знак ^ в начале квадратных скобок, можно наоборот исключить эти символы. Данное выражение всему кроме символов 123.
[1-9] - так можно перечислять диапазон символов, в данном случае это любая цифра от 1 до 9.
Скобочные группы:
(один|два|три) - такое выражение будет соответствовать любому из слов "один", "два", "три".
Скобочные группы захватываются и в последствии их можно использовать в заменяемом значении. Покажем это в примерах.
Полезные сервисы
regex101.com можно "вживую" писать и тестировать регулярные выражения.
regexr.com еще один вариант подобного сервиса.
Составление регуляных выражений с помощью AI
Наш бот Q-Parser умеет составлять регулярные выражения по запросу. Просто опишите что вам нужно, дайти пару примеров того что нужно выделить и он составит для вам подходящую регулярку.
Примеры регулярных выражений
Текст: Фиолетовое платье красного цвета. Размеры: 24, 25, 26
Регулярное выражение: /Размеры:\s*[1-9, ]+/uis
На что заменяем: Пустая строка
Результат: Фиолетовое платье красного цвета**.**
Текст: Ширина 22 мм
Регулярное выражение: /\d+/uis
На что заменяем: 12
Результат: Ширина 12 мм
Текст: Ширина 38 метров
Регулярное выражение: /(\d+) метров/uis
На что заменяем: палубы $1 сантиметров
Результат: Ширина палубы 38 сантиметров
В данном примере мы выделили цифры в скобки в регулярном выражении, а затем подставили их в $1 в замене.
Текст: Красный барбарис шел по зеленой улице в синем сарафане
Регулярное выражение: /(красный|зеленой|синем)/uis
На что заменяем: Фиолетовый
Результат: Фиолетовый барбарис шел по Фиолетовый улице в Фиолетовый срафане
Текст: Красный фартук увидел красный светофор и красный баклажан.
Регулярное выражение: /Красный (фартук|баклажан)/uis
На что заменяем: $1 пиджак
Результат: Красный пиджак увидел красный светофор и красный пиджак
Текст: Красный красный красный красный
Регулярное выражение: /(^красный|красный$)/uis
На что заменяем: зеленый
Результат: зеленый красный красный зеленый
Текст: Фиолетовый манжет с красной затежкой
Регулярное выражение: /(манжет).*/uis
На что заменяем: $1
Результат: Фиолетовый манжет
Текст: Категория > Подкатегория > Раздел
Регулярное выражение: /^[^>]+>/uis
На что заменяем: пустая строка
Результат: Подкатегория > Раздел
О парсинге сайтов простыми словами. С примерами о Q-Parser
Рассказываем о качественных текстах для интернет-магазинов
Продолжаем рассказывать о качественных текстах для интернет-магазинов
Разбираем ошибки, которые совершают организаторы совместных покупок
В чем преимущества облачного парсинга☁️ над локальным💻: сравнение по принципу работы и функционалу. Почему лучше выбрать облачный парсинг: как он экономит время⏳ и затраты💰.
Поймайте посещаемость за хвост!
Узнайте как повысить лояльность участников на совместных покупках
Как правильно рассказать участникам своего СП о том, что им пришел пересорт? Что делать, как быть?