Использование регулярных выражений (RegExp) в Linux

20.04.18

Разработка - Инструментарий разработчика

Описывается способ использования регулярных выражений (RegExp) в Linux с использованием тех же компонентов, что и в Windows (COM-объекты VBScript.RegExp).

Скачать файлы

Наименование Файл Версия Размер
VBScript-скрипт для обработки регулярных выражений
.vbs 1,68Kb
0
.vbs 1,68Kb Скачать

Задача: Необходимо из 1С использовать регулярные выражения (RegExp) в Linux.
Проблема: В Windows можно использовать COM-объект VBScript.Regexp. В Linux нет COM-объектов.
Решение: Устанавливаем Wine и выполняем скрипт через командную строку.
Исходные данные: Клиент-серверный вариант установки 1С. Клиенты любые, сервер - Linux (в моем случае Debian Wheezy).

Теперь по шагам

1. Установим wine (https://wiki.winehq.org/Debian).

wine ставится на i386 архитектуру.
Проверим, что она у нас стоит:

# dpkg --print-architecture

Если нет, то установим (за подробностями сюда https://wiki.debian.org/ru/Multiarch/HOWTO):

# dpkg --add-architecture i386

Установим репозиторий для установки:

wget -nc https://dl.winehq.org/wine-builds/Release.key
apt-key add Release.key

Добавим в список пакетов (/etc/apt/sources.list или отдельным файлом в папку /etc/apt/sources.list.d) строчку:
deb https://dl.winehq.org/wine-builds/debian/ DISTRO main

где DISTRO - имя вашего дистрибутива (у меня wheezy)

Собственно установка:

# apt-get update
# apt-get install --install-recommends winehq-stable

При попытке установить пакет wine на wheezy возникла ошибка:
"The method driver /usr/lib/apt/methods/https could not be found."
Репозиторий winehq использует протокол https для загрузки.

Решается установкой нужного транспорта на apt:

# apt-get install apt-transport-https

Установим полезный скрипт winetricks (с сайта, т.к. в репозитории может быть сильно устаревшим):

# wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
# chmod +x winetricks
# cp winetricks /usr/bin

Для пользователя (usr1cv8), от которого запущен сервер 1С и  будет запускаться wine настраиваем его окружение:

# su - usr1cv8
$ winecfg

Установим библиотеку для работы с VBScript.

$ winetricks wsh56vb

Со временем может выйти более новая версия библиотеки, тогда будет сообщение типа: "Calling wsh56 is deprecated, please use wsh57 instead".
В этом случае устанавливаем указанную версию библиотеки (в данном случае wsh57vb).

Для платформы x64 сперва создаем окружение win32 (требуется для VBScript).
Здесь создается отдельная папка (на свой вкус, я сделал в домашней папке пользователя 1С) ~/.wine32 с библиотеками своей архитектуры.

$ WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
$ WINEPREFIX=~/.wine32 winetricks wsh56vb

Теперь о том, как я это использую

У меня есть задачи разбирать полученные СМС и по полученным совпадениям создавать и заполнять тот или иной документ.
Для этого я создаю правила обработки, в котором задаю регулярное выражение. При анализе текста СМС в случае совпадения с регулярным выражением я разбиваю текст СМС на группы (match) и подгруппы (submatch) и использую эти значения для заполнения нужного мне документа.

Скрипт VBScript и его вызов приведен на скриншотах к статье.

Командная строка вызова скрипта:

$ wine cscript.exe z:ИмяФайлаСкрипта z:ИмяФайлаШаблона z:ИмяФайлаАнализируемогоТекста > ИмяФайлаРезультата 2> ИмяФайлаОшибкок

где

  • ИмяФайлаСкрипта - полное имя файла VBScript-скрипта
  • ИмяФайлаШаблона - полное имя файла, в которое записывается шаблон регулярного выряжения
  • ИмяФайлаАнализируемогоТекста - полное имя файла, в которое записывается анализируемый текст
  • ИмяФайлаРезультата - файл, в который перенаправляем вывод работы скрипта (например через WShell.Echo)
  • ИмяФайлаОшибкок - файл, в который будет записаны возможные ошибки обработки скрипта
  • Первые 3 файла предваряем буквой диска "z:" (z - это корень файловой системы для wine).

Примечания:

  1. Код выполняется на сервере, т.е. можно использовать в качестве регламентного задания 1С.
  2. Описанный способ так же работает и в Windows, но для этого возможно понадобятся разрешения администратора на выполнение скриптов (csсript.exe).
  3. Работа ведется через файлы (соответственно медленнее, чем через COM-объекты, вызываемые из 1С в Windows).
     

Регулярные выражения RegExp Linux Debian COM

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122182    673    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7302    22    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3547    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177762    1074    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99350    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18120    6    8    

40

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28111    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 20.04.18 10:44
Сообщение было скрыто модератором.
...
2. azubar 45 21.04.18 17:11 Сейчас в теме
гораздо проще использовать командную строку линукса, тот же grep
6. vsbronnikov 80 22.04.18 01:10 Сейчас в теме
(2) Когда я думал как мне реализовать регулярные выражения в Linux я рассматривал варианты использовать имеющиеся консольные утилиты типа grep, sed, awk. Но тогда мне бы пришлось знать принципы работы этих утилит.
А так на данный момент у меня на входе есть просто "регулярное выражение" (оно и в африке "регулярное выражение") и текст для анализа. При этом для Linux и Windows на входе одно и тоже.
Не хотелось бы мне grep настраивать и использовать на винде.
И чем проще grep не ясно. Приведите пример для решения моей задачи.
10. azubar 45 22.04.18 11:57 Сейчас в теме
(6) если с grep, sed, awk проблемы то можно использовать nodejs имхо все же проще и быстрее работать будет чем предложенный вариант.
13. binx 167 23.04.18 09:51 Сейчас в теме
Когда я думал как мне реализовать регулярные выражения в Linux я рассматривал варианты использовать имеющиеся консольные утилиты типа grep, sed, awk. Но тогда мне бы пришлось знать принципы работы этих утилит.

Зато оно того стоит)
3. МихаилМ 21.04.18 17:51 Сейчас в теме
есть ВК под линукс
https://infostart.ru/public/183084/

реализация на языке 1с8 https://infostart.ru/public/328736/

и использование без компонент xpatch https://infostart.ru/public/280340/
7. vsbronnikov 80 22.04.18 01:15 Сейчас в теме
(3)
1. ВК под Linux. Я читал эту статью. Даже скачал компоненту, но при подключении её даже в винде у меня возникло какое-то исключение (сейчас не вспомню). А в статье внизу приписочка "Основные планы на ближайшее будещее - сделать linux-версию" (орфография автора сохранена) и это было написано в 2014 году.
2. Реализация на языке 1С - во первых не весь синтаксис регулярных выражений поддерживается, во вторых это отдельная конфигурация, которую нужно встроить себе.
3. Наверное имелось ввиду xpath, а не xpatch. На сколько я понимаю это для работы с XML, но никак не для регулярных выражений.
4. ArchLord42 83 21.04.18 20:17 Сейчас в теме

У меня есть задачи разбирать полученные СМС и по полученным совпадениям создавать и заполнять тот или иной документ.
Для этого я создаю правила обработки, в котором задаю регулярное выражение. При анализе текста СМС в случае совпадения с регулярным выражением я разбиваю текст СМС на группы (match) и подгруппы (submatch) и использую эти значения для заполнения нужного мне документа.

Немного не по теме, но :)
В эпоху расцвета машинного обучения, вместо того, чтобы е...я мучаться с регулярками проще взять питон и накидать простенькую модель и обучить их на ваших СМСках, делается это не сложно, уже давно свет увидел очень хорошую либу для машинки, называется keras - высокоуровная обертка над парой фрейморков для машнки, которая позволяет решать некоторые задачи машинного обучения, в вашем случае она более чем подходит, классификация текста вообще за вечер делается :)
8. vsbronnikov 80 22.04.18 01:17 Сейчас в теме
(4) Хм... интересная тема с машинным обучением. Я совсем не в теме, но частенько слышу. Может стоит попробовать. Смущает, что нужно разворачивать целую среду для работы. В любом случае после самого анализа СМС нужно ещё и интегрировать с 1С.
5. starik-2005 3033 21.04.18 21:33 Сейчас в теме
https://infostart.ru/public/464971/ - без внешних компонент и без дополнительного кода со стороны 1С. Но, правда, только проверка на соответствие шаблону. Работает через встроенный в 1С механизм паттернов XDTO-типов.
9. vsbronnikov 80 22.04.18 01:17 Сейчас в теме
(5) Читал эту статью, но просто проверки соответствия мне мало.
11. vsbronnikov 80 23.04.18 09:36 Сейчас в теме
Замерил время (в миллисекундах) затрачиваемое на вычисление регулярного выражения (прикрепил график).
БОльшая часть приходится именно на выполнение скрипта (500..1000 мс).

Попробовал сперва тестировать текст с помощью решения из комментария (5).
Но в ответ на все имеющиеся рабочие шаблоны ошибка "Значение не соответствует образцу".

Вот например:
(.*) (\d{2})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2}) покупка (\d+\.?\d*)р (.*) Баланс: (\d+\.?\d*)
Ошибка проверки данных XDTO:
Значение: 'VISA0000 22.04.18 16:16 покупка 80р M-N EVSEY Баланс: 100.00р' не соответствует простому типу: {sample-my-package}testtypes
Значение не соответствует образцу

При том, что текст соответствует данному шаблону (можно проверить на популярном "online regexp tester", который 101).
Прикрепленные файлы:
12. vsbronnikov 80 23.04.18 09:50 Сейчас в теме
(11) Сам же себе отвечаю по вопросу проверки регулярного выражения с помощью XDTO.
Мои текущие регулярные выражения описывают не всю строку текста, а до последнего совпадения.

На приведенном мной примере для работы через XDTO шаблон должен быть таким (буква "р" на конце):
(.*) (\d{2})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2}) покупка (\d+\.?\d*)р (.*) Баланс: (\d+\.?\d*)р

Проверка с помощью XDTO сильно ускорит быстродействие. Т.е. все проверки делаются с помощью XDTO, а разбор текста на группы скриптом только 1 раз.
Оставьте свое сообщение