EnotPRO Logo EnotPRO

Регулярные выражения

Основные символы регулярных выражений (шпаргалка)

Символ Значение Пример
. Любой символ . — найдёт всё
\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 (код страны)
]

Другие форматы, которые найдёт:

  • 89123456789
  • 9123456789
  • 8 (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 — захвачено в cmd
  • 123456789 — захвачено в target
  • 3h — число 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"
]
© 2025 EnotPRO. Все права защищены.