Снегопат
https://snegopat.ru/forum/

Парсер регулярных выражений без Com
https://snegopat.ru/forum/viewtopic.php?f=6&t=218
Страница 1 из 4

Автор:  1cmax [ 07 июл 2012, 12:27 ]
Заголовок сообщения:  Парсер регулярных выражений без Com

Все пытаюсь загуглить, есть ли парсер регулярных выражений для 8.2 без использования COM объекта "VBScript.RegExp"
Не нашел...

Скажем набор функций, делающий то же самое,
Чисто теоретически можно взять исходник оперсорсного парсера и сделать на встроенном языке 1с.
Не факт, что быстро будет работать, но хотя бы будет..
Занимался этим кто-нибудь.. интересно...

Сервак на линухе, веб-клиент, а нужно парсить регулярные выражения на сервере без использования COM
Как быть?

Автор:  Magister [ 07 июл 2012, 12:32 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Правильный путь - написать ВК с использованием Native API.
Неправильный, но теоретически работоспособный - вызывать какой-нибудь скрипт на bash/python/что-угодно через КомандаСистемы.
Правда на 14-м релизе под Linux это не работало по непонятным причинам.

Автор:  1cmax [ 08 июл 2012, 13:01 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Magister писал(а):
Правильный путь - написать ВК с использованием Native API.
Неправильный, но теоретически работоспособный - вызывать какой-нибудь скрипт на bash/python/что-угодно через КомандаСистемы.
Правда на 14-м релизе под Linux это не работало по непонятным причинам.

скрипт ос мм, интересно..
интересно а вк такую никто не писал ?

Автор:  sosnae [ 09 июл 2012, 09:48 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Fragster с мисты обещал, когда-то написать скриптик на php с поиском по RegExp. Идея такая - поднимаем web сервер и делаем http запрос к localhost.

Автор:  orefkov [ 09 июл 2012, 10:00 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.

Автор:  lustin [ 09 июл 2012, 14:16 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

orefkov писал(а):
Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.


ОФФТОПИК: самое интересное что в этой самой библиотеке есть тот самый метод Split который кстати через те же RegExp'ы и выполняется.
Если бы в порядке изучения NativeAPI реализовать методы
1. РазложитьСтрокуВМассивПодстрок()
2. ПолучитьСтрокуИзМассиваПодстрок()

и в довесок

3. ПодставитьПараметрыВСтрокуИзМассива()

тогда такую библиотеку можно не в качестве экспериментов использовать, а в production пускать

Автор:  1cmax [ 10 июл 2012, 10:40 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

orefkov писал(а):
Самый прикол, что 1С для работы с юникодом использует ICU, пакет от IBM. И в нем помимо всего прочего, есть и работа с регэкспами.
Т.е. 1С надо всего лишь написать обертку вокруг уже имеющихся функций, чтобы можно было пользоваться из языка 1С.
Дай ка я сейчас в порядке изучения NativeAPI попробую сделать это сам.

Было бы прекрасно :)

Автор:  orefkov [ 12 июл 2012, 14:17 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Вот начинаю пробу.
Скачать

Цитата:
- Видишь суслика?
- Нет.
- И я нет. А он - есть.
(с) ДМБ

Для работы с юникодом 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)
Возвращает индекс следующий за конечной позицией захваченной подгруппы.
Нулевая группа - все захваченное выражение.

Автор:  kuntashov [ 12 июл 2012, 14:59 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Очень круто!

Автор:  orefkov [ 12 июл 2012, 15:03 ]
Заголовок сообщения:  Re: Парсер регулярных выражений без Com

Саш, мне нужны баг-репорты, а не респекты :)
Хотя спасибо, конечно же.
Работает ли на сервере?
Работает ли под разными релизами 8.2 ?

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/