Регулярные выражения
Регулярные выражения (или просто «регулярки») — это специальные шаблоны для поиска и проверки текста.
С их помощью можно определить, соответствует ли сообщение определённому правилу. Например:
- содержит ли текст номер телефона;
- указана ли дата в нужном формате;
- состоит ли сообщение только из цифр;
- написал ли пользователь одно из нескольких ключевых слов.
Регулярные выражения часто используются в ботах для проверки ответов пользователей и запуска разных сценариев в зависимости от введённых данных.
Шаблон бота с готовыми примерами регулярных выражений можно скопировать по ссылке:
https://senler.ru/cabinet/botshare/1230502_c0f5a5457766fc24ea3ec55dd738cf46
Из чего состоит регулярное выражение
Регулярное выражение может содержать:
Обычные символы
Обычные символы соответствуют самим себе.
Например, выражение:
кот
найдёт слово «кот» в тексте.
Метасимволы
Метасимволы — это специальные символы, которые выполняют определённые функции.
Например:
.
*
+
?
[]
Такие символы не ищут сами себя, а задают правила поиска.
Если необходимо найти именно символ . или ?, а не использовать его как специальный символ, перед ним ставится обратный слеш:
\.
\?
Это называется экранированием.
Начало и конец строки
Иногда важно проверить не отдельную часть сообщения, а весь текст целиком.
Для этого используются специальные символы:
| Символ | Значение |
|---|---|
| ^ | начало строки |
| $ | конец строки |
Например:
^привет$
Совпадение произойдёт только в том случае, если пользователь отправил ровно слово «привет».
Подойдут:
- привет
Не подойдут:
- привет всем
- ну привет
- привет!
Группы
Круглые скобки позволяют объединять несколько частей выражения в одну группу.
Например:
(abc)
соответствует последовательности символов abc.
Выражение:
a(bc)
найдёт последовательность abc, где часть bc выделена в отдельную группу.
Группы особенно полезны вместе с операторами выбора и повторения.
Оператор «или»
Символ | позволяет указать несколько вариантов, любой из которых считается подходящим.
Например:
cat|dog
соответствует словам cat или dog.
Другой пример:
(red|blue)car
Подойдут:
- redcar
- bluecar
Не подойдёт:
- greencar
Классы символов
Классы символов задаются в квадратных скобках и позволяют указать набор допустимых символов.
Перечисление символов
Например:
[abc]
означает: один символ, который может быть a, b или c.
Диапазоны
Часто удобнее указать диапазон символов.
| Выражение | Что означает |
|---|---|
| [0-9] | любая цифра |
| [a-z] | любая строчная латинская буква |
| [A-Z] | любая заглавная латинская буква |
| [a-zA-Z] | любая латинская буква |
| [а-яёА-ЯЁ] | любая буква русского алфавита, включая Ё |
| [aeiou] | любая из перечисленных букв |
| [0-9a-fA-F] | любая шестнадцатеричная цифра |
Например:
[0-9]
найдёт любую отдельную цифру:
- 0
- 5
- 9
Исключение символов
Если поставить символ ^ в начале класса символов, будут выбраны все символы, кроме указанных.
Например:
[^0-9]
соответствует любому символу, который не является цифрой.
Подойдут:
- а
- %
- пробел
Не подойдут:
- 0
- 5
- 9
Специальные классы символов
Для часто используемых наборов символов существуют сокращённые обозначения.
| Выражение | Что означает |
|---|---|
| \d | любая цифра |
| \D | любой символ, кроме цифры |
| \w | буква или цифра |
| \W | любой символ, кроме букв и цифр |
| \s | пробельный символ (пробел, перенос строки, табуляция) |
| \S | любой символ, кроме пробельного |
Например:
\d
эквивалентно:
[0-9]
Квантификаторы
Квантификаторы позволяют указать, сколько раз должен повторяться символ, класс символов или группа.
Звёздочка *
Означает: ноль или более повторений.
a*
Подойдут:
- пустая строка
- a
- aa
- aaa
Плюс +
Означает: одно или более повторений.
b+
Подойдут:
- b
- bb
- bbb
Не подойдёт пустая строка.
Вопросительный знак ?
Означает: символ может присутствовать один раз или отсутствовать совсем.
Например:
colou?r
Подойдут:
- color
- colour
Точное количество повторений
Для задания конкретного количества повторений используются фигурные скобки.
Ровно N повторений
\d{3}
соответствует трём цифрам подряд:
- 123
- 555
Не менее N повторений
\w{2,}
соответствует двум и более буквам или цифрам подряд.
Подойдут:
- ab
- abc
- test123
От N до M повторений
[a-zA-Z]{1,3}
соответствует одной, двум или трём латинским буквам.
Подойдут:
- a
- ab
- abc
Не подойдут:
- abcd
- 123
Где проверять регулярные выражения
Перед использованием рекомендуется протестировать выражение на специальных сервисах:
- Regex101
- RegExr
Они позволяют проверить, какие строки будут найдены, а также помогают понять, как работает составленное выражение.
Обратите внимание: данные сервисы являются сторонними инструментами. Сервис Senler не отвечает за их работу и корректность результатов.
Готовые регулярные выражения для популярных задач
Ниже приведены примеры регулярных выражений, которые часто используются в ботах и автоматизациях.
Проверка номера телефона РФ
Позволяет проверить номер в формате +7XXXXXXXXXX или 8XXXXXXXXXX.
^(\+7|8)\d{10}$
Подойдут:
- +79001234567
- 89001234567
Проверка адреса электронной почты
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Подойдут:
Проверка даты в формате ДД.ММ.ГГГГ
^\d{2}\.\d{2}\.\d{4}$
Подойдут:
- 01.01.2025
- 31.12.2026
Проверка года рождения
Для пользователей, родившихся с 1900 по 2099 год.
^(19|20)\d{2}$
Подойдут:
- 1998
- 2005
Проверка возраста
Возраст от 1 до 120 лет.
^([1-9]|[1-9]\d|1[01]\d|120)$
Подойдут:
- 18
- 35
- 120
Проверка имени
Разрешены только русские буквы, дефис и пробел.
^[А-Яа-яЁё -]+$
Подойдут:
- Иван
- Анна-Мария
- Мария Петрова
Проверка имени и фамилии
Требуется минимум два слова.
^[А-Яа-яЁё]+(?: [А-Яа-яЁё]+)+$
Подойдут:
- Иван Иванов
- Анна Мария Петрова
Проверка ссылки на профиль VK
^https:\/\/vk\.com\/[A-Za-z0-9_.]+$
Подойдут:
Проверка ссылки на Telegram
^https:\/\/t\.me\/[A-Za-z0-9_]+$
Подойдут:
Проверка числового значения
Только целое число.
^\d+$
Подойдут:
- 10
- 250
- 9999
Проверка дробного числа
Допускается точка или запятая.
^\d+([.,]\d+)?$
Подойдут:
- 10
- 10.5
- 10,5
Проверка промокода
Только латинские буквы и цифры, длина от 4 до 20 символов.
^[A-Za-z0-9]{4,20}$
Подойдут:
- SALE2025
- BONUS10
Проверка ИНН физического лица
12 цифр.
^\d{12}$
Проверка ИНН организации
10 цифр.
^\d{10}$
Проверка почтового индекса РФ
6 цифр.
^\d{6}$
Проверка даты рождения
Формат ДД.ММ.ГГГГ.
^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$
Проверка ответа «Да» или «Нет»
^(да|нет)$
Проверка нескольких ключевых слов
^(хочу бонус|хочу подарок|хочу скидку)$
Совпадение произойдёт только при вводе одной из указанных фраз.
Поиск любого номера телефона внутри сообщения
Подходит для ситуаций, когда пользователь пишет номер вместе с другим текстом.
(\+7|8)\d{10}
Например:
- Мой номер 89001234567
- Позвоните на +79001234567
Поиск даты внутри сообщения
\d{2}\.\d{2}\.\d{4}
Например:
- Родился 01.01.2000
- Встреча состоится 15.09.2026