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

20.04.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
VBScript-скрипт для обработки регулярных выражений
.vbs 1,68Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.

Задача: Необходимо из 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

См. также

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

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

12000 руб.

02.09.2020    171853    962    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14351    109    46    

108

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

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

22200 руб.

06.10.2023    17307    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27298    96    48    

138

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

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

15000 руб.

10.11.2023    11911    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191266    1152    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18097    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1128    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 20.04.18 10:44
Сообщение было скрыто модератором.
...
2. azubar 50 21.04.18 17:11 Сейчас в теме
гораздо проще использовать командную строку линукса, тот же grep
6. vsbronnikov 85 22.04.18 01:10 Сейчас в теме
(2) Когда я думал как мне реализовать регулярные выражения в Linux я рассматривал варианты использовать имеющиеся консольные утилиты типа grep, sed, awk. Но тогда мне бы пришлось знать принципы работы этих утилит.
А так на данный момент у меня на входе есть просто "регулярное выражение" (оно и в африке "регулярное выражение") и текст для анализа. При этом для Linux и Windows на входе одно и тоже.
Не хотелось бы мне grep настраивать и использовать на винде.
И чем проще grep не ясно. Приведите пример для решения моей задачи.
10. azubar 50 22.04.18 11:57 Сейчас в теме
(6) если с grep, sed, awk проблемы то можно использовать nodejs имхо все же проще и быстрее работать будет чем предложенный вариант.
13. binx 173 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 85 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 85 22.04.18 01:17 Сейчас в теме
(4) Хм... интересная тема с машинным обучением. Я совсем не в теме, но частенько слышу. Может стоит попробовать. Смущает, что нужно разворачивать целую среду для работы. В любом случае после самого анализа СМС нужно ещё и интегрировать с 1С.
5. starik-2005 3098 21.04.18 21:33 Сейчас в теме
https://infostart.ru/public/464971/ - без внешних компонент и без дополнительного кода со стороны 1С. Но, правда, только проверка на соответствие шаблону. Работает через встроенный в 1С механизм паттернов XDTO-типов.
9. vsbronnikov 85 22.04.18 01:17 Сейчас в теме
(5) Читал эту статью, но просто проверки соответствия мне мало.
11. vsbronnikov 85 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 85 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 раз.
Оставьте свое сообщение