Регулярные выражения
Основные символы регулярных выражений (шпаргалка)
| Символ | Значение | Пример |
|---|---|---|
| . | Любой символ | . — найдёт всё |
| \d | Любая цифра | \d{3} — три цифры |
| \w | Буква, цифра или _ | \w+ — слово |
| \s | Пробел, табуляция, новая строка | \s — пробел |
| + | От 1 и более раз | \d+ — число |
| * | От 0 и более раз | \w* — может быть пусто |
| {n} | Ровно n раз | \d{2} — две цифры |
| ? | 0 или 1 раз (делает символ необязательным) | https? — http или https |
| ( ) | Группа (сохраняет результат) | (\d+) |
| (?: ) | Группа без сохранения | (?:www.) |
| [abc] | Любой из перечисленных символов | [а-я] — любая русская буква |
| ^ | Начало строки | ^Привет |
| $ | Конец строки | конец$ |
Базовые примеры регулярных выражений
1. Любой текст (захват группы)
RegExp: (.+)
Описание: Ищет любую последовательность из одного и более символов и сохраняет её в группу.
Как работает:
.— любой одиночный символ (кроме символа новой строки)+— один и более раз (квантификатор)( )— сохраняет найденное в группу для дальнейшего использования
Пример использования: Извлечение всего сообщения пользователя.
Результат на тексте: Привет, как дела?
Handler.
regex.
"list": [
0: "Привет, как дела?", // полное совпадение
1: "Привет, как дела?" // группа 1
]
2. Любое число (одна и более цифр)
RegExp: (\d+)
Описание: Находит и извлекает последовательность из одной или более цифр.
Как работает:
\d— любая цифра от 0 до 9+— один и более раз
Пример использования: Поиск возраста, количества товаров, суммы в чеке.
Результат на тексте: Мне 25 лет, а брату 30
Handler.
regex.
"list": [
0: "25", // первое совпадение (полное)
1: "25", // группа 1
]
3. Ровно 10 цифр подряд
RegExp: (\d{10})
Описание: Ищет последовательность, состоящую ровно из десяти цифр.
Как работает:
\d— любая цифра{10}— ровно 10 повторений
Пример использования: Поиск номера заказа из 10 цифр, кода подтверждения.
Результат на тексте: Ваш код: 1234567890
Handler.
regex.
"list": [
0: "1234567890", // полное совпадение
1: "1234567890" // группа 1
]
4. Отдельное слово
RegExp: \b(\w+)\b
Описание: Находит отдельное слово, состоящее из букв, цифр или знака нижнего подчёркивания.
Как работает:
\b— граница слова (начало или конец слова)\w— любая буква, цифра или знак _+— один и более раз\b— закрывающая граница слова
Пример использования: Извлечение ключевых слов, поиск команд.
Результат на тексте: Привет мир!
Handler.
regex.
"list": [
0: "Привет", // первое совпадение (полное)
1: "Привет", // группа 1
]
Следующее совпадение: мир
5. Дата в формате ДД.ММ.ГГГГ
RegExp: \d{2}\.\d{2}\.\d{4}
Описание: Находит дату, где день, месяц и год разделены точками.
Как работает:
\d{2}— ровно две цифры (день)\.— точка (экранирована, так как . — спецсимвол)\d{2}— ровно две цифры (месяц)\.— точка\d{4}— ровно четыре цифры (год)
Пример использования: Извлечение даты рождения или даты заказа.
Результат на тексте: Дата регистрации: 25.12.2023
Handler.
regex.
"list": [
0: "25.12.2023", // полное совпадение
1: "25", // группа 1 (день)
2: "12", // группа 2 (месяц)
3: "2023" // группа 3 (год)
]
6. Email-адрес
RegExp: ^([\w.-]+)@([\w.-]+\.[a-z]{2,})$
Описание: Базовая проверка и извлечение email-адреса.
Как работает:
^— Начало строки([\w.-]+)— Группа 1 — имя ящика: буквы, цифры, точки, дефисы@— Символ собаки([\w.-]+\.[a-z]{2,})— Группа 2 — домен: имя + точка + зона (com, ru, org и т.д.)$— Конец строки
Пример использования: Сбор email-адресов пользователей.
Результат на тексте: Моя почта: ivan.ivanov@mail.ru
Handler.
regex.
"list": [
0: "ivan.ivanov@mail.ru", // полное совпадение
1: "ivan.ivanov", // группа 1 (имя ящика)
2: "mail.ru" // группа 2 (домен)
]
7. URL-адрес
RegExp: ^(https?:\/\/)?([^\/\?]+)
Описание: Извлекает протокол (опционально) и домен из URL.
Как работает:
https?— http + возможная буква://— двоеточие и два слеша(?:[-\w]+\.)+— группа без захвата: имя сайта с точкой (например, google.)[a-z]{2,}— доменная зона из двух и более букв (com, ru, org)
Пример использования: Поиск всех ссылок в сообщении.
Результат на тексте: Перейдите на https://example.com
Найдено: https://example.com
Handler.
regex.
"list": [
0: "https://example.com", // полное совпадение
1: "https://", // группа 1 (протокол)
2: "example.com" // группа 2 (домен)
]
8. Простое арифметическое выражение
RegExp: \d+[\+\-\*\/]\d+
Описание: Находит выражение вида "число оператор число" (например, 2+2 или 10-5)
Как работает:
\d+— первое число[\+\-\*\/]— один из операторов: +, -, *, / (экранированы)\d+— второе число
Пример использования: Калькулятор в чате или извлечение выражений для вычисления.
Результат на тексте: Сколько будет 15+7?
Найдено: 15+7
Можно разбить: число 15, оператор +, число 7
9. Номер телефона (упрощённый)
RegExp: (?:(\+7|8)?\s*\(?\d{3}\)?\s*\d{3}[-]?\d{2}[-]?\d{2})
Описание: Находит российские номера телефонов в разных форматах.
Как работает:
(\+7|8)?— код РФ (7 или 8) может отсутствовать\s*— возможные пробелы\(?\d{3}\)?— код оператора из 3 цифр, возможно в скобках\s*— возможные пробелы\d{3}[-]?\d{2}[-]?\d{2}— основная часть номера с возможными дефисами
Результат на тексте: Позвони +7 (912) 345-67-89
Результат:
Handler.
regex.
"list": [
0: "+7 (912) 345-67-89", // полное совпадение
1: "+7" // группа 1 (код страны)
]
Другие форматы, которые найдёт:
8912345678991234567898 (912) 345-67-89
10. Команда со значением
RegExp: ^!cmd(\s+.+)?$
Описание: Выражение находит команду !cmd, которая может содержать опциональное значение после пробела.
Как работает:
^Якорь начала строки — проверка начинается с первого символа!cmdИщет точное совпадение !cmd(\s+.+)?Квантификатор ? делает эту группу опциональной. Внутри:$Якорь конца строки — после команды (и значения) ничего лишнего быть не должно
Выражение регистрозависимое: !cmd не найдёт !Cmd или !CMD.
Результат:
Handler.
regex.
"list": [
0: "!cmd привет",
1: "привет" // без пробела
]
Продвинутые варианты регулярных выражений
Универсальное регулярное выражение для административных команд
RegExp: ^(?<cmd>!(ban|unban|kick|mute|unmute|unrestrict|un))\s+(?<target>@\w+|\d+)(?:\s+(?:(?<durationValue>\d+)(?<durationType>[mhdw])))?(?:\s+(?<reason>.+))?$
Описание: Выражение парсит команды модерации с обязательными параметрами (команда, цель) и опциональными (время, причина). Поддерживает цели в виде @username или числового ID, а время — в формате число + единица (минуты, часы, дни, недели)
Как работает:
^Начало строки(?<cmd>!(ban|unban|kick|mute|unmute|unrestrict|un))Именованная группа cmd — захватывает команду с !. Доступные команды: ban, unban, kick, mute, unmute, unrestrict, un\s+Один и более пробелов между командой и целью(?<target>@\w+|\d+)Именованная группа target — цель: либо @ + буквы/цифры/подчёркивания, либо просто цифры (числовой ID)(?:\s+(?:(?<durationValue>\d+)(?<durationType>[mhdw])))?Опциональная группа времени — пробел, затем число (durationValue) и единица (durationType): m (минуты), h (часы), d (дни), w (недели)(?:\s+(?<reason>.+))?Опциональная группа причины — пробел и любой текст до конца строки$Конец строки
Примеры
Пример 1: Команда с username
Вход: !ban @username нарушение правил
Шаги:
^— начало строки!ban— команда ban захвачена в группу cmdПробел— разделитель@username— цель захвачена в группу targetПробел— перед причинойнарушение правил— захвачено в группу reason
Результат:
Handler.
regex.
"list": [
0: "!ban @username нарушение правил",
"cmd": "ban",
"target": "@username",
"reason": "нарушение правил"
]
Пример 2: Команда с ID и временем
Вход: !mute 123456789 3h
Шаги:
!mute— захвачено в cmd123456789— захвачено в target3h— число 3 в durationValue, буква h в durationType
Результат:
Handler.
regex.
"list": [
0: "!mute 123456789 3h",
"cmd": "mute",
"target": "123456789",
"durationValue": "3",
"durationType": "h"
]
Пример 3: Полная команда (всё вместе)
Вход: !mute @user 7d за флуд
Результат:
Handler.
regex.
"list": [
0: "!mute @user 7d за флуд",
"cmd": "mute",
"target": "@user",
"durationValue": "7",
"durationType": "d",
"reason": "за флуд"
]
Пример 4: Минимальная команда (без времени и причины)
Вход: !kick @spamer
Результат:
Handler.
regex.
"list": [
0: "!kick @spamer",
"cmd": "kick",
"target": "@spamer"
]