Парсер регулярных выражений без Com
Парсер регулярных выражений без Com
Все пытаюсь загуглить, есть ли парсер регулярных выражений для 8.2 без использования COM объекта "VBScript.RegExp"
Не нашел...
Скажем набор функций, делающий то же самое,
Чисто теоретически можно взять исходник оперсорсного парсера и сделать на встроенном языке 1с.
Не факт, что быстро будет работать, но хотя бы будет..
Занимался этим кто-нибудь.. интересно...
Сервак на линухе, веб-клиент, а нужно парсить регулярные выражения на сервере без использования COM
Как быть?
Не нашел...
Скажем набор функций, делающий то же самое,
Чисто теоретически можно взять исходник оперсорсного парсера и сделать на встроенном языке 1с.
Не факт, что быстро будет работать, но хотя бы будет..
Занимался этим кто-нибудь.. интересно...
Сервак на линухе, веб-клиент, а нужно парсить регулярные выражения на сервере без использования COM
Как быть?
Re: Парсер регулярных выражений без Com
Правильный путь - написать ВК с использованием Native API.
Неправильный, но теоретически работоспособный - вызывать какой-нибудь скрипт на bash/python/что-угодно через КомандаСистемы.
Правда на 14-м релизе под Linux это не работало по непонятным причинам.
Неправильный, но теоретически работоспособный - вызывать какой-нибудь скрипт на bash/python/что-угодно через КомандаСистемы.
Правда на 14-м релизе под Linux это не работало по непонятным причинам.
В реальності все не так, як насправді
Re: Парсер регулярных выражений без Com
Magister писал(а):Правильный путь - написать ВК с использованием Native API.
Неправильный, но теоретически работоспособный - вызывать какой-нибудь скрипт на bash/python/что-угодно через КомандаСистемы.
Правда на 14-м релизе под Linux это не работало по непонятным причинам.
скрипт ос мм, интересно..
интересно а вк такую никто не писал ?
Re: Парсер регулярных выражений без Com
Fragster с мисты обещал, когда-то написать скриптик на php с поиском по RegExp. Идея такая - поднимаем web сервер и делаем http запрос к localhost.
Re: Парсер регулярных выражений без Com
Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.
Re: Парсер регулярных выражений без Com
orefkov писал(а):Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.
ОФФТОПИК: самое интересное что в этой самой библиотеке есть тот самый метод Split который кстати через те же RegExp'ы и выполняется.
Если бы в порядке изучения NativeAPI реализовать методы
1. РазложитьСтрокуВМассивПодстрок()
2. ПолучитьСтрокуИзМассиваПодстрок()
и в довесок
3. ПодставитьПараметрыВСтрокуИзМассива()
тогда такую библиотеку можно не в качестве экспериментов использовать, а в production пускать
Re: Парсер регулярных выражений без Com
orefkov писал(а):Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.
Было бы прекрасно
Re: Парсер регулярных выражений без Com
Вот начинаю пробу.
Скачать
Для работы с юникодом V8 использует кроссплатформенную библиотеку ICU, которая помимо
прочего, содержит и функционал по работе с регэкспами. По какой-то непонятной оплошности,
1С не "вытащила" этот функционал "наружу", и пользоваться им из языка 1С возможности нет.
Однако, как всегда, на помощь приходят ВК.
Представляю компоненту, которая строит "мостик" из библиотеки ICU в язык 1С.
Подробнее о regexp'ах в ICU можно посмотреть здесь: http://userguide.icu-project.org/strings/regexp
Компонента выполнена по технологии "NativeAPI", и загружается так:
Работу проверял в толстом и тонком клиенте, хочется проверить на сервере.
После этого можно создавать объект "V8RegEx" и использовать его для работы. Пример:
Свойства объекта:
Шаблон/Pattern
строка, чтение/запись.
Задает регулярное выражение.
Строка/Input
строка, чтение/запись.
Задает исходную строку, к которой будет применятся регулярное выражение.
КоличествоГрупп
число, чтение.
Показывает количество захваченных подгрупп после применения регулярного выражения.
Нулевая группа - всё захваченное выражение.
Методы:
Совпадает()/Matches()
Возвращает - истина, если исходная строка полностью совпадает с регулярным выражением,
иначе - ложь.
Начинается()/LookingAt()
Возвращает - истина, если начало исходной строки совпадает с регулярным выражением,
иначе - ложь.
Найти() / Find()
Ищет очередное вхождение выражения в исходной строке.
Возвращает - истина, если вхождение найдено, иначе - ложь.
Группа(НомерГруппы) / Group(Idx)
Возвращает значение захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Начало(НомерГруппы) / Begin(Idx)
Возвращает индекс начала позиции захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Конец(НомерГруппы) / End(Idx)
Возвращает индекс следующий за конечной позицией захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Скачать
- Видишь суслика?
- Нет.
- И я нет. А он - есть.
(с) ДМБ
Для работы с юникодом 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)
Возвращает индекс следующий за конечной позицией захваченной подгруппы.
Нулевая группа - все захваченное выражение.
Re: Парсер регулярных выражений без Com
Очень круто!
С уважением,
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
Александр Кунташов
Канал про 1С в Телеграме: @kuntashov_devnotes
Re: Парсер регулярных выражений без Com
Саш, мне нужны баг-репорты, а не респекты 
Хотя спасибо, конечно же.
Работает ли на сервере?
Работает ли под разными релизами 8.2 ?
Хотя спасибо, конечно же.
Работает ли на сервере?
Работает ли под разными релизами 8.2 ?