Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

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

 Проверка наличия совпадения

регулярка.проверить(шаблон, текст)

Проверяет, содержит ли текст хотя бы одно совпадение с регулярным выражением. Возвращает логическое значение.

ПараметрТипОписание
шаблонстрокаРегулярное выражение
текстстрокаИсходный текст
Возвращает: логическое значение
Пример:
$есть = регулярка.проверить("\\b\\w+@\\w+\\.\\w+\\b", "ivan@example.com");

 Поиск первого совпадения

регулярка.найти(шаблон, текст)

Находит первое совпадение в тексте. Возвращает объект с полями match (совпавшая строка), index (позиция начала), groups (массив групп). Если совпадений нет — возвращает ничто.

ПараметрТипОписание
шаблонстрокаРегулярное выражение
текстстрокаИсходный текст
Возвращает: объект или ничто
Пример:
$совпадение = регулярка.найти("\\d+", "abc123def");
если ($совпадение != ничто) {
    вывод("Найдено: " + $совпадение.match);
}

 Поиск всех совпадений

регулярка.найтиВсе(шаблон, текст)

Находит все совпадения в тексте. Возвращает массив объектов, каждый аналогичный возвращаемому функцией найти.

ПараметрТипОписание
шаблонстрокаРегулярное выражение
текстстрокаИсходный текст
Возвращает: массив объектов
Пример:
$все = регулярка.найтиВсе("\\d+", "1 2 3");
для каждого ($m из $все) {
    вывод($m.match + " на позиции " + $m.index);
}

 Замена по шаблону (простая)

регулярка.заменить(шаблон, текст, замена)

Заменяет все вхождения шаблона в тексте на указанную строку. Возвращает новую строку.

ПараметрТипОписание
шаблонстрокаРегулярное выражение
текстстрокаИсходный текст
заменастрокаСтрока замены
Возвращает: строка (текст с заменами)
Пример:
$заменён = регулярка.заменить("\\d+", "123abc456", "[ЦИФРА]");

 Замена с функцией

регулярка.заменить(шаблон, текст, функция_замены)

Альтернативная форма — вместо строки замены передаётся функция. Функция получает три аргумента: совпавшую строку, позицию, весь текст. Должна возвращать строку для замены.

ПараметрТипОписание
шаблонстрокаРегулярное выражение
текстстрокаИсходный текст
функция_заменыфункцияФункция возвращающая строку
Возвращает: строка (текст с заменами)
Пример: можно использовать для динамической подстановки, например, умножения числа на 2.
Пример:
$квадратЗамена = регулярка.заменить("\\d+", "1 2 3 4", функция($матч, $поз, $целиком) {
    возврат $матч;   // можно вернуть любую строку
});

 Разбиение строки

регулярка.разбить(шаблон, текст)

Разбивает текст по совпадениям с шаблоном (шаблон служит разделителем). Возвращает массив строк.

ПараметрТипОписание
шаблонстрокаРазделитель (регулярное выражение)
текстстрокаИсходный текст
Возвращает: массив строк
Пример:
$части = регулярка.разбить("\\s+", "раз два три");

 Экранирование строки

регулярка.экранировать(строка)

Экранирует все специальные символы регулярных выражений в переданной строке, чтобы её можно было использовать как литерал в шаблоне.

ПараметрТипОписание
строкастрокаСтрока для экранирования
Возвращает: строка (экранированная)
Пример:
$литерал = регулярка.экранировать("(a+b)*c?");  // "\(a\+b\)\*c\?"

 Именованные группы

При использовании именованных групп в шаблоне (синтаксис (?<имя>...)) результат поиска (объект) содержит поле namedGroups — объект, где ключи — имена групп, значения — соответствующие подстроки.

Пример:
$шаблонИмен = "(?<год>\\d{4})-(?<месяц>\\d{2})-(?<день>\\d{2})";
$дата = "сегодня 2025-05-19";
$рез = регулярка.найти($шаблонИмен, $дата);
если ($рез != ничто) {
    вывод("Год: " + $рез.namedGroups.год);
}

 Полный тестовый скрипт

Ниже приведён полный скрипт, демонстрирующий все возможности модуля «регулярка».

вывод("=== ТЕСТ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ ===\n");

$шаблон = "\\b\\w+@\\w+\\.\\w+\\b";
$текст = "Мои контакты: ivan@example.com, petr@mail.ru, не email";

// 1. проверить
$есть = регулярка.проверить($шаблон, $текст);
вывод("Есть email? " + $есть + "\n");

// 2. найти первый
$совпадение = регулярка.найти($шаблон, $текст);
если ($совпадение != ничто) {
    вывод("Найдено: " + $совпадение.match + " на позиции " + $совпадение.index + "\n");
    вывод("Группы: " + массивы.соединить($совпадение.groups, ", ") + "\n");
}

// 3. найти все
$все = регулярка.найтиВсе($шаблон, $текст);
вывод("Всего email: " + массивы.длина($все) + "\n");
массивы.каждый($все, функция($m) {
    вывод("  - " + $m.match + " (поз. " + $m.index + ")\n");
});

// 4. замена (простая)
$заменён = регулярка.заменить("\\d+", "123abc456def", "[ЦИФРА]");
вывод("Замена чисел: " + $заменён + "\n");

// 5. замена через функцию (без умножения, просто возвращаем исходный текст)
$квадратЗамена = регулярка.заменить("\\d+", "1 2 3 4", функция($матч, $поз, $целиком) {
    возврат $матч;   // можно вернуть строку как есть
});
вывод("Результат замены: " + $квадратЗамена + "\n");

// 6. разбиение
$части = регулярка.разбить("\\s+", "раз два три четыре");
вывод("Разбиение по пробелам: " + массивы.соединить($части, ", ") + "\n");

// 7. экранирование
$литерал = регулярка.экранировать("(a+b)*c?");
вывод("Экранированный литерал: " + $литерал + "\n");

// 8. именованные группы
$шаблонИмен = "(?<год>\\d{4})-(?<месяц>\\d{2})-(?<день>\\d{2})";
$дата = "сегодня 2025-05-19";
$рез = регулярка.найти($шаблонИмен, $дата);
если ($рез != ничто) {
    вывод("Год: " + $рез.namedGroups.год + "\n");
    вывод("Месяц: " + $рез.namedGroups.месяц + "\n");
    вывод("День: " + $рез.namedGroups.день + "\n");
}

вывод("=== ВСЕ ТЕСТЫ ПРОЙДЕНЫ ===\n");