Вот начинаю пробу.
СкачатьЦитата:
- Видишь суслика?
- Нет.
- И я нет. А он - есть.
(с) ДМБ
Для работы с юникодом V8 использует кроссплатформенную библиотеку ICU, которая помимо
прочего, содержит и функционал по работе с регэкспами. По какой-то непонятной оплошности,
1С не "вытащила" этот функционал "наружу", и пользоваться им из языка 1С возможности нет.
Однако, как всегда, на помощь приходят ВК.
Представляю компоненту, которая строит "мостик" из библиотеки ICU в язык 1С.
Подробнее о regexp'ах в ICU можно посмотреть здесь:
http://userguide.icu-project.org/strings/regexpКомпонента выполнена по технологии "NativeAPI", и загружается так:
Код:
Если не ПодключитьВнешнююКомпоненту("путь\re.dll", "RegEx", ТипВнешнейКомпоненты.Native) Тогда
Предупреждение("Не удалось подключить ВК");
КонецЕсли;
Работу проверял в толстом и тонком клиенте, хочется проверить на сервере.
После этого можно создавать объект "V8RegEx" и использовать его для работы. Пример:
Код:
ре = Новый("V8RegEx");
ре.Шаблон = "(?i)аа(а)";
ре.Строка = "Ааа";
Сообщить(ре.Совпадает());
Сообщить(ре.КоличествоГрупп);
Для Номер = 0 По ре.КоличествоГрупп Цикл
Сообщить("Группа " + Номер + ": " + ре.Группа(Номер) + " начало=" + ре.Начало(Номер) + " конец=" + ре.Конец(Номер));
КонецЦикла;
ре.Строка = "ббб";
Сообщить(ре.Совпадает());
ре.Строка = "аааббб";
Сообщить(ре.Начинается());
ре.Строка = "аааббюбдАааааАбббва";
Пока ре.Найти() Цикл
Сообщить("----------------------");
Для Номер = 0 По ре.КоличествоГрупп Цикл
Сообщить("Группа " + Номер + ": " + ре.Группа(Номер) + " начало=" + ре.Начало(Номер) + " конец=" + ре.Конец(Номер));
КонецЦикла;
КонецЦикла;
Свойства объекта:
Шаблон/Pattern
строка, чтение/запись.
Задает регулярное выражение.
Строка/Input
строка, чтение/запись.
Задает исходную строку, к которой будет применятся регулярное выражение.
КоличествоГрупп
число, чтение.
Показывает количество захваченных подгрупп после применения регулярного выражения.
Нулевая группа - всё захваченное выражение.
Методы:
Совпадает()/Matches()
Возвращает - истина, если исходная строка полностью совпадает с регулярным выражением,
иначе - ложь.
Начинается()/LookingAt()
Возвращает - истина, если начало исходной строки совпадает с регулярным выражением,
иначе - ложь.
Найти() / Find()
Ищет очередное вхождение выражения в исходной строке.
Возвращает - истина, если вхождение найдено, иначе - ложь.
Группа(НомерГруппы) / Group(Idx)
Возвращает значение захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Начало(НомерГруппы) / Begin(Idx)
Возвращает индекс начала позиции захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Конец(НомерГруппы) / End(Idx)
Возвращает индекс следующий за конечной позицией захваченной подгруппы.
Нулевая группа - все захваченное выражение.