Регулярные выражения, способ 3-й

28.04.18

Разработка - Запросы

На момент написания статьи на Инфостарте предлагали 2 способа проверки строки на соответствие шаблону. Первый с использованием внешних компонент, второй с использованием фабрики XDTO (голый парсинг текста не считаем). Предлагаю третий - с использованием языка запросов.

Откровенно говоря, этот способ работает дольше и предлагает меньшее богатство инструментов для создания шаблона, но тем не менее кому-то может показаться интересным, кроме того, не помешает знать о нем для общего развития. Пишем запрос:

|ВЫБРАТЬ
|    ВЫБОР
|        КОГДА &Строка ПОДОБНО &Шаблон
|            ТОГДА ИСТИНА
|        ИНАЧЕ ЛОЖЬ
|    КОНЕЦ КАК ЕстьСоответствие

Устанавливаем значения параметров и выполняем. В результате всегда будет 1 строка, содержащая в реквизите ЕстьСоответствие булево значение.

Для описания шаблона можно использовать следующие выражения:

  • %: любое количество произвольных символов 
  • _: один произвольный символ
  • []: любой одиночный символ из перечисленных внутри квадратных скобок.
  • [^]: любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
  • \: экранирование управляющих символов

Например:

  • "%АБВ%" - строка, в которой встречается последовательность "АБВ"
  • "%[А-Я1-5]%" - строка, в которой встречается любая киррилическая буква в верхнем регистре или цифра от 1 до 5
  • "%[АВБ]%" - строка, в которой встречается буква А, Б или В
  • "%[^К-Н]%" - строка, в которой не встречаются символы К, Л, М, Н.
  • "[0-3][0-9] ЯНВАР[ЬЯ] 20[0-9][0-9]" - дата в январе 21-го века )

Далее, можно писать множественные сравнения, собирать текст запроса из многих условий и вообще использовать как фантазия подскажет. Удачи!

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122182    673    389    

714

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5746    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6287    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

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

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1742    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5389    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16188    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 312 28.04.18 12:26 Сейчас в теме
Дык... В упр. формах - это только с переходом на сервер можно сделать. Да еще и будет обращение в БД.
Так-то да, запросное подобие по-проще регулярок. Но накладные расходы, мне кажется, будут слишком велики.
2. m-rv 962 28.04.18 13:06 Сейчас в теме
(1) ну понятно, что это не клиентский вариант )
на самом деле я использую этот вариант потому, что он (как не странно) дает выигрыш в производительности в специфических условиях: у меня множество строк (~1000) и множество шаблонов (~100) по которым их надо проверить. и запрос позволяет проверить такое "одним махом", другие варианты - только циклом.
3. ImHunter 312 28.04.18 13:12 Сейчас в теме
(2) Т.е., динамически генеришь огромный запрос? Хм... Тоже надо подумать в эту сторону.
Как раз занимаюсь разбором данных (экселей). Замаялся и уже в сторону НС начал думать;)
4. m-rv 962 28.04.18 13:16 Сейчас в теме
(3) да, именно так и именно при разборе экселя )))
5. Fragster 1138 28.04.18 14:26 Сейчас в теме
Но ведь это даже близко не регулярные выражения, которые все имеют ввиду https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1­%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D­1%8F
tormozit; Aphanas; dmpas; +3 Ответить
7. m-rv 962 28.04.18 16:07 Сейчас в теме
(5) да, с манипуляциями беда, но у меня ощущение, что когда «все» говорят про регулярные выражения - имеют ввиду прежде всего поиск по шаблону, а с этим все ок
9. Fragster 1138 28.04.18 20:38 Сейчас в теме
(7) ну выделите с помощью выражений шаблона запроса 1с, например, число с разделителем из строки, эдакий аналог [1-9]\d*(((,|\.)\d{2})|(( )\d{3}))*
1.23, 1 000.00, 1 000 000.23 и т.п. (реально используемый пример для парсинга инвойсов из пдф)
10. m-rv 962 28.04.18 21:06 Сейчас в теме
(9) вы пытаетесь сказать, что инструментарий ненастолько богат, как, скажем в случае использования xdto?
11. Fragster 1138 03.05.18 10:18 Сейчас в теме
(10) Что-то типа того. Для себя решил что буду использовать для винды vbscript, в кроссплатформенном варианте - командную строку или свой http-сервис
8. palsergeich 28.04.18 19:58 Сейчас в теме
Штука конечно интересная, но на более менее большой таблице по производительности полный швах.
Единственное что быстро работает это конструкция ТЕКСТ% на строках ограниченной длинны попадающих в индекс по плану запроса, все остальное от лукавого.
Если такая задача становится - решать ее желательно другими методами.
Скажем так на жалких 100 000 позициях номенклатуры решение этой задачи через полнотекстовый поиск более чем на порядок быстрее, но там есть ньюансы.
А есть области где номенклатурные позиции измеряются миллионами (практически любое направление связанное с ремонтом, для каждой модели свой номенклатурный каталог)
Но если задача стоит в разборе таблицы, находящейся в памяти, как описано здесь в комментариях, то решение вполне себе приемлимо, но встает вопрос, а не проще напрямую через ADO подключится к екселю и выполнить запрос на его стороне, по своему опыту - 250 000 строк екселя запросом с отбрами и группировками выполнились за единицы секунд.
serverstar; +1 Ответить
15. serverstar 62 09.02.22 13:49 Сейчас в теме
12. jONES1979 03.05.18 11:59 Сейчас в теме
... И привести бы ещё ссылки на первые оба способа
13. starik-2005 3033 03.05.18 12:45 Сейчас в теме
(12) https://infostart.ru/public/464971/ - 2-й способ. Первый - это просто внешняя компонента от M$ (и других, кто умеет на C писать)..
14. МихаилМ 07.05.18 13:50 Сейчас в теме
в скд тоже есть оператор LIKE . и на сервер данные гонять не нужно. к тому же в вт не все типы колонок можно поместить, в в скд все.
более того : оператор like субд зависим .
16. user1393353 11 15.02.23 08:23 Сейчас в теме
Не работает, у меня например вот такое выражение "Менеджер-кассир+( [0-9]{1,2})?"
Оставьте свое сообщение