Поиск публикаций
Регулярные выражения
Содержание
Проверка наличия совпадения
регулярка.проверить(шаблон, текст)
Проверяет, содержит ли текст хотя бы одно совпадение с регулярным выражением. Возвращает логическое значение.
$есть = регулярка.проверить("\\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", "[ЦИФРА]");
Замена с функцией
регулярка.заменить(шаблон, текст, функция_замены)
Альтернативная форма — вместо строки замены передаётся функция. Функция получает три аргумента: совпавшую строку, позицию, весь текст. Должна возвращать строку для замены.
$квадратЗамена = регулярка.заменить("\\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");