Подсистема 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 – с радостью буду за них приобретать на Инфостарте разработки коллег.
Вступайте в нашу телеграмм-группу Инфостарт