
Представьте: нужно проверить документ или веб-страницу и найти повторяющиеся слова, чтобы, скажем, заменить их. А если найти нужно не просто слова, а электронные адреса, которые бывают разными.
Решение этой задачи существенно упростит использование регулярных выражений.
Регулярные выражения или regex (от англ. regular expression) – это особый синтаксис для описания шаблонов поиска информации. С их помощью можно искать, заменять или извлекать данные из текста с высокой точностью. В основе регулярных выражений лежат символы, которые задают правила для поиска, например, всех цифр или слов, начинающихся на определенную букву. Регулярные выражения позволяют описать сложные условия поиска в простой и читаемой форме, что делает их незаменимыми для различных задач.
Регулярные выражения помогут в разных случаях – от валидации данных, например, при проверке форматов номера телефона до анализа текстов: получения ссылок или другой информации.
Посмотрим на синтаксис регулярных выражений. Дальше на примерах станет понятнее.
Синтаксис регулярных выражений
Основные элементы синтаксиса регулярных выражений:
-
Символы и классы символов:
-
. – любой символ, кроме новой строки
-
\d – любая цифра (эквивалент [0-9])
-
\w – любой буквенно-цифровой символ (эквивалент [a-zA-Z0-9_])
-
\s – любой пробельный символ (включая пробел, табуляцию, новую строку)
-
-
Квантификаторы:
-
* – 0 или более повторений
-
+ – 1 или более повторений
-
? – делает символ необязательным, означает 0 или 1 повторение
-
{n} – ровно n повторений
-
{n,} – n или более повторений
-
{n,m} – от n до m повторений
-
-
Группировка и альтернативы:
-
(abc) – группа символов
-
a|b – либо a, либо b (альтернатива)
-
-
Начало и конец строки:
-
^ – начало строки
-
$ – конец строки
-
-
Экранирование:
-
\ – экранирует специальные символы, чтобы использовать их в буквальном смысле (например, \. для поиска точки)
-
Давайте разберемся, как использовать синтаксис регулярных выражений на простом примере. Будем использовать регулярные выражения для поиска определенных шаблонов в строках текста. Для примера возьмем задачу нахождения всех email-адресов в тексте.
Задача: Найти email-адрес в тексте
Допустим, есть текст, и нужно найти все email-адреса в нем.
Пример текста:
Email-адреса: example@mail.com, test123@domain.org, и invalid-email@domain.com.
Напишем регулярное выражение для поиска email-адресов
Email-адрес состоит из двух частей:
-
Логин (например, example в example@mail.com);
-
Домен (например, mail.com в example@mail.com).
Мы можем использовать регулярное выражение:
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
Разбор регулярного выражения:
-
[A-Za-z0-9._%+-] – соответствует любому символу в логине email (буквы, цифры, точки, подчеркивания, проценты, плюсы и минусы);
-
+ – означает «один или более символов», то есть логин может быть длинным, но не пустым;
-
@ – соответствует символу @ в email;
-
[A-Za-z0-9.-] – соответствует символам домена (буквы, цифры, точки и дефисы);
-
\. – экранированная точка, чтобы она символизировала именно точку, а не «любой символ»;
-
[A-Za-z]{2,} – соответствует доменному расширению (например, .com или .org), состоящему как минимум из двух букв.
Или другой пример. Понадобилось найти все номера телефонов в тексте. Они могут быть записаны в разных форматах: с разделителями или без них.
Задача: Найти все номера телефонов в тексте
Предположим, у нас есть текст, и мы хотим найти все номера телефонов, которые могут быть в таких форматах:
-
+7 (123) 456-78-90
-
8-123-456-78-90
-
+7 123 456 78 90
Напишем регулярное выражение для поиска номера телефона
Чтобы найти такие номера, нам нужно учесть несколько возможных вариантов записи:
-
Начало с +7 или 8;
-
Возможные разделители, такие как пробелы, дефисы и скобки;
-
Строка состоит из цифр.
Регулярное выражение для поиска номера телефона может выглядеть так:
(\+7|8)[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}
Разбор регулярного выражения
-
(\+7|8) – ищем либо +7, либо 8 в начале номера.
-
[\s\-]? – необязательный символ пробела или дефиса между частями номера (может быть один или отсутствовать).
-
\(?\d{3}\)? – три цифры, которые могут быть окружены скобками (например, (123) или 123).
-
[\s\-]? – снова необязательный пробел или дефис.
-
\d{3} – три цифры (например, для кода города).
-
[\s\-]? – снова необязательный пробел или дефис.
-
\d{2} – две цифры (например, для последней части номера).
-
[\s\-]? – снова необязательный пробел или дефис.
-
\d{2} – последние две цифры.
Регулярные выражения могут быть «жадными» или «ленивыми». Жадные стараются захватить больше символов, а ленивые – как можно меньше. Например, выражение .* захватит все символы, начиная с текущей позиции, и до последнего возможного совпадения, стараясь захватить весь текст, даже если есть более короткие варианты. В то время как .*? – только до первого совпадения, то количество символов, которое нужно для первого успешного совпадения.
Регулярные выражения зависят от регистра. Например, если в регулярном выражении указано слово «яблоко», то оно будет находить только «яблоко» с маленькой буквы. Если же в тексте будет написано «Яблоко» с большой буквы, то оно уже не будет найдено этим выражением.
Если нужно, чтобы регулярное выражение не зависело от регистра (то есть находило и «яблоко», и «Яблоко»), нужно указать, что регистр не важен, например, добавив дополнительный флажок i.
Многие языки программирования поддерживают регулярные выражения для работы, например, Java, Perl, PHP, JavaScript, Python и другие.
Как использовать регулярные выражения с ChatApp?
Кейс: Магазин ювелирных украшений хочет поздравлять своих клиентов с днем рождения и отправлять им скидку на покупку. Для этого нужно точно определить дату рождения каждого клиента, которую они указывают при регистрации.
Регулярные выражения в этом случае могут помочь в валидации даты рождения, чтобы убедиться, что информация введена правильно.
Как настроить сбор данных через конструктор ботов ChatApp?
1. Менеджер запрашивает дату рождения в формате «DD.MM.YYYY», клиент вводит свою дату рождения.

2. Происходит валидация через регулярные выражения
В блоке «Условие» в Конструкторе ботов выберите «RegEx» и добавьте регулярное выражение из выпадающего списка или укажите свое.

Регулярное выражение проверяет, что введенная дата соответствует правильному формату и гарантирует, что данные введены корректно, без ошибок (например, чтобы не было букв).
Пример регулярного выражения для валидации даты рождения: ^\d{2}\.\d{2}\.\d{4}$
3. Получив дату рождения клиента, можно автоматизировать рассылку подарков и скидок за несколько дней до дня рождения.

Лайфхаки по использованию
Регулярные выражения довольно полезны, но их использование может быть не таким очевидным, как это может показаться на первый взгляд.
-
Читаемость: Регулярные выражения могут быстро стать сложными и трудными для понимания. Добавляйте комментарии к регулярным выражениям, особенно если они используются в больших проектах.
-
Производительность: Сложные регулярные выражения могут значительно замедлить выполнение программы, особенно если они используются на больших объемах данных. В таких случаях стоит оптимизировать выражения и избегать использования сложных паттернов.
-
Тестирование: Прежде чем внедрять регулярные выражения в проект, всегда проверяйте их на различных тестовых данных. Для этого можно использовать онлайн-инструменты, такие как regex101, которые помогут проверить ваше регулярное выражение на практике.
Регулярные выражения – это мощный инструмент. Они позволяют эффективно решать задачи поиска, замены и валидации данных. Однако, несмотря на свою гибкость, регулярные выражения требуют аккуратности в написании и тестировании. Правильное использование regex может значительно упростить жизнь, а неправильное – создать путаницу и замедлить работу.
ссылка на оригинал статьи https://habr.com/ru/articles/897206/
Добавить комментарий