Внедрение поддержки регулярных выражений в платформу 1С:Предприятие стало долгожданным событием для многих разработчиков. Долгое время для решения задач парсинга строк приходилось использовать сторонние внешние компоненты (ВК) или писать сложные алгоритмы посимвольного перебора. Рассмотрим, что именно привнесло обновление, как использовать этот инструмент и в каких случаях он действительно эффективен.
Технически реализация в платформе опирается на библиотеку ICU (International Components for Unicode). Это стандарт индустрии, который обеспечивает высокую производительность и корректную работу с различными кодировками. Однако, в отличие от многих других языков программирования, где RegExp представлен как полноценный объект класса, в 1С механизм реализован через глобальные функции.
Это накладывает определенные ограничения:
lookahead/lookbehind.Несмотря на споры в сообществе, регулярные выражения — это инструмент, который кратно упрощает жизнь в специфических задачах:
Если задача требует сложного разбора строки, использование последовательности СтрНайти и СтрЗаменить часто приводит к созданию крайне запутанного кода. Рассмотрим пример функции, которая может заменить громоздкие конструкции для поиска данных между двумя маркерами:
Функция НайтиШаблон(Строка, МаркерНачала, МаркерКонца) Экспорт
Р = Новый Структура("Найден", Ложь);
Поз = Найти(Строка, МаркерНачала);
Если Поз = 0 Тогда
Возврат Р;
КонецЕсли;
Начало = Лев(Строка, Поз - 1);
Хвост = Сред(Строка, Поз + СтрДлина(МаркерНачала));
Поз = Найти(Хвост, МаркерКонца);
Если Поз = 0 Тогда
Возврат Р;
КонецЕсли;
Конец = Сред(Хвост, Поз + СтрДлина(МаркерКонца));
Середина = Лев(Хвост, Поз - 1);
Р.Вставить("Начало", Начало);
Р.Вставить("Середина", Середина);
Р.Вставить("Конец", Конец);
Р.Найден = Истина;
Возврат Р;
КонецФункции
Такой подход делает код прозрачным. Однако, если задача усложняется (например, поиск чисел в строке, где разделители могут быть разными, или сложные условия «не между словами»), регулярные выражения становятся незаменимыми.
СтрНайти или объектную модель запроса, используйте стандартные средства. Регулярные выражения — это инструмент для «тяжелых» случаев парсинга текста.RegEx1CAddin, которые предоставляют более гибкий интерфейс работы с регулярками.В заключение, появление встроенных регулярных выражений — это шаг вперед. Даже если текущая реализация кажется ограниченной, она избавляет от необходимости «городить» сложные циклы и делает код обработки внешних данных более лаконичным и надежным.