Имя: Пароль:
1C
1С v8
Регулярные выражения в платформе
, , ,
0 MM
 
02.08.22
10:58
1. Буду использовать новые возможности 43% (3)
2. Мне это не нужно 43% (3)
3. Останусь на прежних механизмах RegExp 14% (1)
Всего мнений: 7

1С наконец-то анонсировала поддержку регулярных выражений, хотя как-то на мой взгляд куцо.
https://wonderland.v8.1c.ru/blog/podderzhka-regulyarnykh-vyrazheniy-vo-vstroennom-yazyke/
1 mikecool
 
02.08.22
10:59
разверните вашу мысль, не стесняйтесь
2 СеменовСемен
 
02.08.22
11:02
Странно что они не сделали объект, а напихали кучу глобальных функций
3 unbred
 
02.08.22
11:04
(0) очевидная штука, которая напрашивалась в момент создания 1с в принципе.

Буду использовать новые возможности
4 unenu
 
02.08.22
11:05
это еще в 8.0 должно было быть в коробке.
что ж, 20 лет спустя и готово.

что дальше затолкают в платформу: распознавания лиц, машинное обучение, поддержка ВР?
хотя это тоже будет еще 20 лет спустя.
5 MM
 
02.08.22
11:05
(1) Наконец-то дождался. Но без возможности использовать подвыражения и удобного получения выбранных подстрок это потребует обёртки. Так же к сожалению продолжение поиска потребует повторного вызова функции, что не выглядит быстро. И ещё, пока не описаны технические детали реализации механизма сложно будет переходить на платформенные регулярки.
7 MM
 
02.08.22
11:08
(3) шутка состоит в том что механизм есть в платформе давным давно в рамках ICU, вот только он не был выведен в язык 1С. У Орефкова была ВК который этот механизм могла доставать, но, к сожалению, была не очень стабильна.
8 Garykom
 
гуру
02.08.22
11:11
Хрень.
Ибо надо не по строкам а по объектам (как в памяти так и в базе) 1С.
9 Garykom
 
гуру
02.08.22
11:12
(8)+ По типу есть некая ТЗ со строковым полем или справочник Номенклатура с наименованием
И вот по ТЗ или по справочнику искать регуляркой
10 СеменовСемен
 
02.08.22
11:14
(9) это ты linq описываешь, а не регулярки
11 vde69
 
02.08.22
11:16
регулярные выражения сделают код нечитаемым... примерно как скрипты unix системах.

вот например кто с лету может означать что делает шаблон

^#\/база\.была.*сдохла

Мне это не нужно
12 СеменовСемен
 
02.08.22
11:18
Спорить о том нужно или не нужно уже поздно
13 MM
 
02.08.22
11:19
(9) А как делать поиск по базе если её SQL такого не умеет, а кроме того у каждого объекта может быть обработчик получения представления, который его превратит в произвольную строку. Кроме того мне гораздо интереснее не поиск, а получение подстрок и их замена.
(11) Есть у RegExp такой недостаток, что их не сложно писать, но вот читать, особенно чужие, это печаль. И нужно прочесть Фридла.
14 Волшебник
 
02.08.22
11:20
Я поддерживаю. Будет много новых интересных веток на форуме.
15 vde69
 
02.08.22
11:20
если сделают конструктор регулярок (типа как конструктор запросов) тогда взлетит
16 unbred
 
02.08.22
11:20
(11) ты же как-то можешь читать такое: ?("база была",false,"сдохла")
привыкнешь)
17 Кирпич
 
02.08.22
11:22
(11) Ну всяко проще, чем читать страницу кода, который это ищет без регулярок
19 Garykom
 
гуру
02.08.22
11:24
(16) Нет я такое читать не могу
Как вижу складываю маты на автора и стараюсь переписать на Если Тогда Иначе
20 Ryzeman
 
02.08.22
11:29
(4) +1
Хорошо что добавили.
Рефакторить всё что на RegExp и прочие поиски через запросы и иную дичь я, конечно, не буду. Но новое - почему бы и нет?

Буду использовать новые возможности
21 Asmody
 
02.08.22
11:30
(0) И как это они не изобрели свой язык регулярок? Как-то не по одинесовски!
22 MM
 
02.08.22
11:32
(21) Синтаксис пока не описан, ждём сюрпризов.
23 ИначеЕсли
 
02.08.22
11:35
Для 1С:исполнителя будет полезно.

Буду использовать новые возможности
24 ИначеЕсли
 
02.08.22
11:37
Но выглядит бедновато без возможности искать по файлам/каталогам и внутри коллекций 1с
25 Ryzeman
 
02.08.22
11:38
(22) СтрЗаменитьПоРегулярномуВыражению(МояСтрока, "♂☻база☻♂☻была☻♂", "сдохла")

?
26 ansh15
 
02.08.22
12:16
В качестве справки будет отсылать на regex101 или аналогичное. Хотя, могут и на ИТС сделать.
27 bolobol
 
02.08.22
12:42
Пример задачи приведите, пожалуйста. Хорошо бы не один.

Мне это не нужно
28 СеменовСемен
 
02.08.22
12:49
(27) обработка входящих данных, а ля текст назначения платежа
29 vde69
 
02.08.22
13:04
(27) примеры
помощник формирования наименования,
хитрый поиск дублей
30 Гений 1С
 
гуру
02.08.22
13:07
(0) хорошо, хотя я 100500 раз писал свои разборы строк.
31 bolobol
 
02.08.22
13:10
(28) СтрНайти - предостаточно, не встречал более хитрой необходимости, а это очень частая задача
(29) формирование наименования - где тут регулярки? Поиск дублей - слишком специфичная задача, если даже пользователи не могут сами наткнуться - только усложнять им жизнь, что им приходится разбирать предложенные списки, а им и так живётся, без разборов. А вот найденное пользователем _срочно_ объединить и устранить - это и без регулярок вылезает
32 СеменовСемен
 
02.08.22
13:10
(31) ну например номер счета найти в строке назначения
33 kittystark
 
02.08.22
13:11
(27) когда-то написал загрузку экселевских файлов от поставщиков и покупателей
с привязкой их наименований номенклатуры к своим наименованиям

так вот такие задачи "кто во что горазд" - хорошо и быстро решаются регулярками
обычным кодом "если Найти() тогда" - просто застрелиться можно
34 СеменовСемен
 
02.08.22
13:11
(32) конечно регулярки тупо можно заменить посимвольным переборов - ведь они именно так и работают
35 bolobol
 
02.08.22
13:43
(32) СтрНайти "№" + СтрНайти " " - решал и решает 100% этих задач
(33) Потому что так не делают, номенклатура привязывается в момент заказа и дальше таких вопросов не возникает. А поиск в электронных накладных идёт по коду, не по наименованию
36 bolobol
 
02.08.22
13:51
Вспоминается бардак с Номенклатурой, который долго упорядочивали. Посадили человека за этот справочник который чётко сформулировал правила наименований. Он за неделю перебил автомагически все наименования и без регулярок. И ушёл в отпуск...
Вернулся, а в номенклатуре вместо:
- светильник потолочный
- светильник напольный
- светильник настенный
...
появились
бра, торшер, люстра, шкафная лучина...

выгнали нерадивых и ситуация не повторялась
37 Arbuz
 
02.08.22
14:57
(0)Если будут более-менее использовать в типовых — куда вы денетесь — будете вникать и нахваливать )
Я бы ещё AWK добавил ))) Хотя большинство тут 'тся' и 'ться' не могут осилить.
(36) Посмотрел бы я, как ты бы вручную перебил номенклатуру, когда её >> 30к позиций! И сегодня формулировка наименований чёткая, а через 15к позиций ещё более чёткая. Хотя любителей обезьяней работы хватает.
Хⱦли думать, надо хⱦярить!©
38 bolobol
 
02.08.22
15:07
(37) Я не сильно там помогал, а позиций на тот момент было около 120ооо. За неделю. Один человек. С программированием знакомый поверхностно. Выборки и автозамены написал.
39 bolobol
 
02.08.22
15:10
(37) ...странно желание смотреть на человека вручную меняющего наименования номенклатуры... подумал я, но понимаю, что за компьютером смотрю как он автоматически что-то делает - с удовольствием) И я как будто занят.. "Компилируется жэ!" ))
40 Ryzeman
 
02.08.22
15:11
(38) Я считаю что элементы и переборы коллекции всё ерунда. Зачем тебе структура если можно сделать 50 переменных и передавать их? Что за новомодные выдумки...
Никто не спорит что что угодно можно сделать через посимвольный подбор, а при очень большом желании извращнуться и через запрос с его ПОДОБНО.
Но есть инструмент, который придумали более 40 лет назад. Почему, блин, не использовать его?
41 bolobol
 
02.08.22
15:14
(40) Это не мне вопрос, наверное. У меня у самого вопрос - примеры для использования в 1С нужны. Сам я этот инструмент (сторонний т.е.) использовал для обновлятора типовой с доработками - это реально ускорило поиск в файлах конфы ЗУПа. Но это слишком специфичная ситуация даже для того чтобы делать её вообще на 1С.
42 bolobol
 
02.08.22
15:16
(40) Кстати, постоянно жаркие споры о том, что в ЗУП-е набор параметров методов передаётся в структурах... люди кругом плачут... переписывают всё на параметры самого метода. Вот вам и структура зачем, если можно 50 переменных. Только по параметрам метода читабельно что за параметр, а структуру надо наизусть знать
43 Ryzeman
 
02.08.22
15:17
(41) Ну, примеры тебе привели. Обработка внешних данных с любых сервисов. Поиск клиентов, номеров телефонов, счетов, названий номенклатур и т.п. Всё, что пользователи могут указывать левой пяткой или всё что в базу притягивается не по строгим маскам
44 Ryzeman
 
02.08.22
15:17
Просто ты утверждаешь что тебе достаточно использовать для этого СтрНайти и Если. Ну ок, тебе достаточно. А людям удобнее RegExp
45 СеменовСемен
 
02.08.22
15:18
(42) если параметров больше 3 то лучше структура
46 bolobol
 
02.08.22
15:18
(43) Тоже - достаточно ограничить пользователя входной маской и проблемы нет. Всяко дешевле чем потом разбираться, почему смс не отправилось
47 Ryzeman
 
02.08.22
15:19
(45) Со структурой и масштабировать код проще. Но это был вообще-то сарказм.
(46) Если сервис НЕ твой и ты НИКАК не можешь повлиять на то, что он тебе шлёт?
48 bolobol
 
02.08.22
15:20
(45) Вот и плачем в ЗУП-е от них... 5-6 модулей приходится прошерстить, чтобы найти полное описание структуры... долго, неудобно, не всегда документировано полностью. Переписываем!
49 СеменовСемен
 
02.08.22
15:20
(48) так описание нужно просто написать
50 Ryzeman
 
02.08.22
15:20
Это как со СЛУ. Вот конкретно мне нахрен не сдались СЛУ в 1с, вообще до лампочки. А коллега из страховой кайфует - у неё математики море и конкретно СЛУ сильно в кассу пришлось.
51 СеменовСемен
 
02.08.22
15:21
А вообще просто нужна жесткая типизация а ля тайпскрипт
52 bolobol
 
02.08.22
15:21
(47) Вот-вот! Вот такой пример хочу! Прям до входных данных с примером всей системы и почему так. Мне - интересно! В 1С мы переписываем все такие места - регулярок избегать именно.
53 bolobol
 
02.08.22
15:24
(50) Про это новшество тоже интересовался, не понял там про производство и СЛУ, но сложилось стойкое впечатление, что там без этого не обойтись. С регулярками вопрос ближе, но они такие тугие, что всеми силами, тем более - что использовать нужно внешний объект, избавляемся от применения.
54 bolobol
 
02.08.22
15:26
Была, кстати, тема у меня о регулярках - там в несколько строк выражение было для поиска какой-то ерунды, но её через Если и СтрНайти - вообще бы жесть писать
55 bolobol
 
02.08.22
15:27
Я к тому, чтобы вы понимали, что я не отрицаю их, а необходимость в применении для задач в 1С не видел. Их писать-то правильно сложно, а читать и подправлять потом...
56 СеменовСемен
 
02.08.22
15:34
(54) а как найти число в строке через СтрНайти?
57 Diversus
 
02.08.22
15:38
(0) Самое интересное, что уже есть ВК, которая умеет это делать и прекрасно работает:
https://github.com/alexkmbk/RegEx1CAddin
58 kittystark
 
02.08.22
16:06
(57) если мне не изменяет склероз, где-то на ИС было решение через фасеты XDTO ("встроенные" в 1С) - там слегка через одно место, но уже "родное", из коробки, без всяких ВК
59 СеменовСемен
 
02.08.22
16:07
(58) там только на сравнение с образцом
60 kittystark
 
02.08.22
16:11
(59) ну да, наверное...
RegExp.Replace - наше все, во всяком случае для меня, поэтому видимо посмотрел и не стал применять
61 kittystark
 
02.08.22
16:18
мне вот другое интересно: этот заявленный функционал можно будет применять в выражениях ресурсов СКД без затыков на безопасный режим?
62 lexushka
 
02.08.22
16:27
по уму это в языке запросов надо
63 kittystark
 
02.08.22
16:29
(62) мечтаю об этом уже лет 15
имхо не потянут
64 bolobol
 
02.08.22
16:31
(56) Для й= 1 по Стрдлина(СтрокаСЧислом) Цикл СтрНайти("0123456789", Сред(СтрокаСЧислом, й)); КонецЦикла;
65 СеменовСемен
 
02.08.22
16:48
(64) ну те ты практически сам создаешь свой регэксп, а можно взять готовый
66 СеменовСемен
 
02.08.22
16:49
(64) твой цикл конечно же не найдет все число, а найдет все числа
67 bolobol
 
02.08.22
16:53
(66) Пардон, не вчитался) Но суть понятна, как и код реализующий эту суть - прозрачен и прост. Да и требуется такое в особо извращённых ситуациях. Ну, т.е., я не видел задач где это необходимо делать на потоке
68 СеменовСемен
 
02.08.22
16:54
(67) далеко не прозрачен, нужно учитывать пред. значения, где то накапливать результат, до первого ненужного символа
69 bolobol
 
02.08.22
16:55
(65) В готовой регулярке будет больше строк и без комментариев не обойтись. Такой код сам себя комментирует... и это не комментарий "тут говнокод")))
70 bolobol
 
02.08.22
16:57
(68) Регулярка внутри именно это и делает - посимвольно просматривает строку, выбирая нужное. Оптимизация в регулярках, вплоть, наверное, до деревьев, распараллеливающих поиск - нужна для обработок оооочень большого объёма данных. Точно не номер счёта разыскать в назначении платежа.
71 kittystark
 
02.08.22
17:07
(67) "на потоке", из реально сделанного, на вскидку:
- причесать наименования к единому шаблону туеву-хучу карточек номенклатуры,  вплоть до "стандартизирования" всяческих разделителей
- выдернуть из наименования упаковку(-и), ед.изм., размеры, бренд и т.п. - записать в свойства
- перенумератор кода элемента справочника, со своими правилами  :)  - да, да, мне не стыдно!

и еще кучу всяких "выбиралок"
72 СеменовСемен
 
02.08.22
17:09
(72) а мог бы как человек через цикл и стрнайти сделать )
73 kittystark
 
02.08.22
17:09
(71) + для себя вынес одно простое правило - если работаю со строками, и конструкция кода сложнее чем СтрНайти() СтрЗаменить() - мне проще воспользоваться регуляркой
74 kittystark
 
02.08.22
17:10
(72) угу, "взмахнула фея палочкой и отвалилась у танка башня..."
из той же оперы
75 Конструктор1С
 
02.08.22
17:35
(45) если параметров много, то надо думать над реорганизацией кода, а не прятать последствия в структуру
76 bolobol
 
02.08.22
17:48
(([^а-яА-ЯёЁa-zA-Z\s\xA0])([\s\xA0]+)([а-яА-ЯёЁa-zA-Z]))|(([^а-яА-ЯёЁa-zA-Z\s\xA0])([\s\xA0]+)([^а-яА-ЯёЁa-zA-Z\s\xA0]))|(([а-яА-ЯёЁa-zA-Z])([\s\xA0]+)([^а-яА-ЯёЁa-zA-Z\s\xA0]))|(([\s\xA0])([\s\xA0]+))

- код убирает пробелы, аналог: СтрНайти(.., Таб, " ");СтрНайти(.., 0160, " ");СтрНайти(.., "  ", " "), но не между словами, дабы сохранить "...Останки КАК Останки...". Попробуй - разберись! Писан был только из-за того, что требовалось пройти все тексты ЗУП-а _быстро_.

А конструкция сложнее чем просто СтрНайти и СтрЗаменить в части "не между словами". Но только из-за скорости и объёма обработки на регулярной основе сделано на регулярке. В обычной, в штатной работе приложения такую необходимость встретить, похоже, только если очень хочется регулярку прикрутить, когда она даёт меньше кода чем код на 1С.
77 novichok79
 
02.08.22
17:48
(0) АХАХАХХА, ну прям 1C way == да, но нет.
positive/negative lookahead?
name matching groups?
НЕ, НЕ СЛЫШАЛИ.
а почему нельзя было сделать как везде - регулярка == экземпляр класса и работа идет через нее?
1С считает разрабов 1С инвалидами, неспособными в полноценные регулярки?
(11) фи, херня

мы в начале строки, дальше идут символы #/база.
далее любое количество любых символов (кроме перевода строк)
и дальше слово сдохла

а че в конце нет $? чтобы точно был конец строки?

но мне этого не нужно, ибо в Golang регулярки почти нормальные (нет positive/negative lookahead, из-за того что разработчики либы гарантируют что время выполнения поиска будет O(n))

Мне это не нужно
78 novichok79
 
02.08.22
17:54
(0) и да, а какую спецификацию регулярок держит сей монстр из сосновых шишек и пластилина?
была уже где-то ВК, которая все это умеет и гораздо лучше.
Лёха из интернетов смог, а великая и ужасная 1С нет?
чет как-то неудобно даже.
(15) regex101.com наше все
79 bolobol
 
02.08.22
17:54
(75) Даа, даааа... именно так и выглядят поверхностно выдаваемые рекомендации. Красиво выглядят, умно, но не имеют ничего общего с реальностью
80 novichok79
 
02.08.22
17:56
(79) понял, принял, милорд - эксперд по выдаче рекомендаций.
хорошо, не спорю.
81 novichok79
 
02.08.22
18:02
> зачем нужны регулярки?

пфффф, очевидно же:

1) сложная работа со строками, чтобы не пейсать везде циклы с обходом строк и кучей если.
за тебя регулярочка строит внутри конечный автомат и делает тоже самое, только без лишей писанины
2) когда надо удалить слово или строку после с несколькими вариантами.
3) когда надо привести строку в какой-либо формат
4) когда надо вырезать слово из скобочек без посимвольного обхода и создания стека скобочек

но, кто я такой чтобы здесь что-то доказывать :)

> слишком сложна (с)

я обычно текстом в комментарии над регуляркой расписываю ожидаемое поведение,
беру прям и копирую с regex101.com -> translate.google.com -> ПРОФИТ
82 bolobol
 
02.08.22
18:08
НовыйЭлемент= РазместитьНовыйЭлементНаФорме(Имя, Заголовок, ТипЭлемента, ПутьКДанным, ПередЭлементом);
Пять параметров, хотя, казалось бы, из обязательных лишь Имя и ТипЭлемента - два параметра лучше чем пять, затем можно НовыйЭлемент. - и Заголовок указать и Путь к данным и разместить в нужное место на форме и прочие параметры настроить... только нужна знать как называются эти параметры. Например, что там есть "РастягиватьПоГоризонтали" и "АвтоРазмерПоГоризонтали", а можно добавить шестой параметр в функцию "Растягивать", и в функции это всё учесть и потом не задаваться этим вопросом. Ни как называется, ни что эти параметры в паре работают. И так далее - функция разрослась до 9-ти параметров, которые покрывают уже несколько лет все хотелки. И ничего помнить не приходится! Всё написано в самой функцией названием параметров, и подсказка работает в конфигураторе из коробки
83 bolobol
 
02.08.22
18:14
(81) Это не реальная задача, это что-то промо-рекламное...
Вот, например, реальная задача: пользователь выбирает галками показатели, которые он хочет видеть в отчёте, группировки. И нужно собрать текст запроса, пихнуть его в СКД.. да тоже.. чем регулярки здесь помогут? Искать ВЫБРАТЬ / ПОМЕСТИТЬ / ГДЕ... чтобы не попасть в подзапрос какой? Сделано через СтрНайти, СтрЗаменить. Ибо - не представляю, чем тут помогут регулярки. Запутать - точно запутают. Там сходу не разберёшь где что править
84 Кирпич
 
02.08.22
20:10
(83) Так никто не заставляет всё делать регулярками. Как удобно, так и делай. А что добавили, правильно. Надо было еще в 7.7 добавлять. Инструмент полезный.
88 Timon1405
 
02.08.22
22:12
89 novichok79
 
03.08.22
00:03
(83) промо-рекламное, кек. откройте для себя мир не1сного IT, там такое сплошь и рядом.
90 novichok79
 
03.08.22
00:04
(88) ну это прям как-то слишком сложно, да и не вставить картинку в исходники.
91 novichok79
 
03.08.22
00:08
(83) жесть какая-то, а чё отбор СКД на форму уже не выводится или теперь не модно?
звучит как какой-то жуткий костыль.
вам там пользователь накрутит так что база пригляжет, если нет контроля галочек.
если уж надо сделать анализ текста запроса, то чем не угодила схема запроса?
и отборы на формах и анализ через схему запроса юзал, пока работал в 1с.
ничего сложного.
92 novichok79
 
03.08.22
00:09
(83) анализ текста запроса регулярками - путь инвалида, имхо.
93 СеменовСемен
 
03.08.22
08:25
(83) у запроса есть объектная модель, никакие стрзаменить не нужны
94 vbus
 
03.08.22
08:53
Народная мудрость:
Некоторые люди, сталкиваясь с проблемой, думают: «Ага, я умный, я решу её с помощью регулярных выражений». Теперь у них две проблемы.
95 bolobol
 
03.08.22
11:11
(93) Не осилил, если честно. Собрать через строки - много проще..
96 AXZ
 
03.08.22
11:18
(4) Поддержка ВР - не выйдешь из вирта пока не укажешь 100500 заданных поставщиком реквизитов)))
97 assasu
 
03.08.22
11:22
(11) книжка Бена Форта читается очень легко
98 Гений 1С
 
гуру
09.08.22
13:43
Решил, раз такая пьянка, поделиться наиболее востребованной функцией вместо регулярок:

Функция НайтиШаблон(Строка, МаркерНачала, МаркерКонца) Экспорт
    
    Р = Новый Структура("Найден", ложь);
    Поз = Найти(Строка, МаркерНачала);
    Если Поз = 0 Тогда
        Возврат Р;
    КонецЕсли;
    Начало = Лев(Строка, Поз - 1);
    Хвост = Сред(Строка, Поз + СтрДлина(МаркерНачала));
    Поз = Найти(Хвост, МаркерКонца);
    Если Поз = 0 Тогда
        Возврат Р;
    КонецЕсли;
    Конец = Сред(Хвост, Поз + СтрДлина(МаркерКонца));
    Середина = Лев(Хвост, Поз - 1);
    Р.Вставить("Начало", Начало);
    Р.Вставить("Середина", Середина);
    Р.Вставить("Конец", Конец);
    Р.Найден = истина;
    Возврат Р;
    
    
КонецФункции
99 TormozIT
 
гуру
09.08.22
13:44
Конечно 2. Подгруппы - наше все.

Останусь на прежних механизмах RegExp
100 СеменовСемен
 
09.08.22
14:01
(99) а кто сказал что не будет подгрупп?
101 MM
 
09.08.22
14:51
(98) А если искомое переменной длины и ограничено цифрами или ограниченным набором символов, идущих в определённом порядке?
(100) На партнёрском сказали.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший