Регулярные выражения на 1С
Что ж… лучше поздно, чем никогда.
Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.
- Описание
- Подробнее
Описание
Подсистема 1С для работы с регулярными выражениями
Вдохновившись материалами книг по алгоритмам и структурам данных, я сделал подсистему работы с регулярными выражениями для 1С. Доступный функционал:
- Построение процессора регулярного выражения по шаблону
- Проверка полного соответствия текста регулярному выражению
- Поиск вхождений в тексте по регулярному выражению
Реализованы следующие элементы построения регулярных выражений:
- Операции:
|
,()
- Квантификаторы:
*
,+
,?
,{n}
,{, n}
,{n, }
,{n, m}
- Символы:
.
,\
,\t
,\n
,\r
,\f
,\a
,\e
,\xhh
,\uhhhh
- Классы символов:
[abc]
,[^x-z]
- Предопределённые классы символов:
\d
,\D
,\h
,\H
,\s
,\S
,\v
,\V
,\w
,\W
Подсистема обходится исключительно средствами платформы 1С. Отрабатывает на клиенте и сервере (методы глобального контекста в 8.3.23 доступны только на сервере).
В основе движка подсистемы недетерминированный конечный автомат. PDF презентации по материалам книги Роберта Сэджвика и Кевина Уэйна.
Разрабатывается на платформах 8.3.21.1302 и 8.3.10.2667
Требуемая минимальная версия: 8.3.6
Требуемая минимальная версия расширения: 8.3.9
Ограничения платформы можно существенно снизить, избавившись от типов Фиксированных коллекций и функции СтрСоединить. Вплоть до 8.1.
Пример кода
Проверка соответствия всей строки шаблону (процессор можно переиспользовать):
Шаблон = "(A*B|\d)D";
Процессор = Регулярка.ПроцессорРаспознавания(Шаблон);
Сообщить(Регулярка.Распознано(Процессор, "D")); // Ложь
Сообщить(Регулярка.Распознано(Процессор, "3D")); // Истина
Сообщить(Регулярка.Распознано(Процессор, "BD")); // Истина
Сообщить(Регулярка.Распознано(Процессор, "AD")); // Ложь
Сообщить(Регулярка.Распознано(Процессор, "AAAAAABD")); // Истина
Поиск вхождений в тексте:
Процессор = Регулярка.ПроцессорРаспознавания("\n");
Текст =
"Белеет парус одинокой
|В тумане моря голубом. —
|Что ищет он в стране далекой?
|Что кинул он в краю родном?";
Вхождения = Регулярка.Вхождения(Процессор, Текст);
PS
Надеюсь, будет хватать времени на развитие проекта. Буду благодарен помощи заинтересованных.
Бесплатно Регулярку скачать можно тут. А если хотите выразить благодарность в виде SM – с радостью буду за них приобретать на Инфостарте разработки коллег.