|
Не работает регулярное выражение.
Timon1405, Zombi, План счетов, MM, maxab72, Волшебник, DiMel_77, Wern, zenik, formista2000, ndrv, AlexKimp, BalBess, SilentMan, boozin, Жеглофф, zenon46, Terrixus, AlvlSpb, Шурик71, sikuda, vbus, dedmoroz777, Kigo_Kigo, mikecool, privetik, backfire, Gun47, dmt, shuhard, Hawk_1c, Prog_man, toypaul, Чужой, Мультук, pasha_d, Crusher, p-soft, Dен, phabeZ, KuznecovvIvan, 2S, GreenDay1986, maxar, denk32, Lama12, trad, DeeK, СвинТуз, Fish, Dzenn, Климов Сергей, nshrek, paramedic, Бычье сердце, nick86, ptiz, yurikmellon2, RomanYS, comp2006, rbcvg, e053nk, Гипервизор, ads55, obs191, Trucker, PuhUfa, DemonShinji2, DimVad, crotnn
| ☑ |
0
Zombi
08.10.25
✎
09:41
|
Пытаюсь сделать отбор с поиском целого слова. Средствами регулярного обмена вроде должно работать так:
Если мы ищем конкретное слово, то можно использовать метасимвол \b, обозначающий границу слова. Если поставить метасимвол с обоих концов слова, мы найдем именно это слово:
Regex: \bарка\b
Найдет: арка
Не найдет:
чарка
аркан
баварка
знахарка
У меня не срабатывает. Что не так?
|
|
1
Dzenn
гуру
08.10.25
✎
08:09
|
|
|
2
Zombi
08.10.25
✎
08:31
|
(1) На regex101.com попробовал /\bарка\b/u отрабатывает нормально. В 1с не получается:
РегулярноеВыражение = "/\bарка\b/u";
Пока Выборка.Следующий() Цикл
Если СтрПодобнаПоРегулярномуВыражению(Выборка.Номенклатура, РегулярноеВыражение) Тогда
Условие не отрабатывает. Выборка.Номенклатура = "Триумфальная арка была".
|
|
3
Zombi
08.10.25
✎
08:34
|
Вот так тоже на сайте отрабатывает, в 1с нет:
РегулярноеВыражение = "/(?<![а-яА-ЯёЁ])арка(?![а-яА-ЯёЁ])/ug";
Пока Выборка.Следующий() Цикл
Если СтрПодобнаПоРегулярномуВыражению(Выборка.Номенклатура, РегулярноеВыражение) Тогда
|
|
4
Волшебник
08.10.25
✎
08:56
|
А с чего Вы взяли, что должно?
|
|
5
Zombi
08.10.25
✎
09:08
|
(4) Ну наверное что то не так сделал. Потому и спрашиваю.
|
|
6
Волшебник
08.10.25
✎
09:14
|
(5) Покажите документацию на регулярные выражения 1С
|
|
7
Zombi
08.10.25
✎
09:20
|
(6) Вот СП
СтрПодобнаПоРегулярномуВыражению (StrLikeByRegularExpression)
Синтаксис:
СтрПодобнаПоРегулярномуВыражению(<Строка>, <РегулярноеВыражение>, <ИгнорироватьРегистр>, <МногострочныйПоиск>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Исходная строка.
<РегулярноеВыражение> (обязательный)
Тип: Строка.
Регулярное выражение, на соответствие которому проверяется исходная строка.
<ИгнорироватьРегистр> (необязательный)
Тип: Булево.
Истина - без учета регистра, Ложь - с учетом регистра.
Значение по умолчанию: Ложь.
<МногострочныйПоиск> (необязательный)
Тип: Булево.
Истина - выполняется многострочный поиск: символу "^" в шаблоне регулярного выражения соответствует начало каждой строки значения параметра <Строка>, символу "$" - конец каждой строки.
Ложь - символу "^" в шаблоне регулярного выражения соответствует начало значения в параметре <Строка>, символу "$" - конец текста.
Значение по умолчанию: Ложь.
Возвращаемое значение:
Тип: Булево.
Истина - строка соответствует регулярному выражению;
Ложь - в противном случае.
Описание:
Проверяет, соответствует ли передаваемая строка передаваемому шаблону исходного выражения.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
РегВыражение = "(\+)?([- ()]?\d[- _():=+]?){10,14}";
Строка = "+9(999)999 99-99";
Результат =
СтрПодобнаПоРегулярномуВыражению(НомерТелефона, РегВыражение);
Использование в версии:
Доступен, начиная с версии 8.3.23.
Описание изменено в версии 8.3.24.
Методическая информация
|
|
8
Волшебник
08.10.25
✎
09:23
|
(7) и где здесь \b ?
|
|
9
Zombi
08.10.25
✎
09:25
|
(8) <РегулярноеВыражение> (обязательный)
Тип: Строка.
Здесь
|
|
10
Волшебник
08.10.25
✎
09:29
|
(9) там нет ничего
|
|
11
Zombi
08.10.25
✎
09:31
|
(10) Туда шаблон передается. В нем применяется \b в том числе.
|
|
12
Zombi
08.10.25
✎
09:35
|
\b граница слова, например:
\bsun\b — найдет sun, но не sunny
https://www.about1c.ru/v83/language-reference/regexp
|
|
13
Волшебник
08.10.25
✎
09:36
|
(12) это не официальная информация
|
|
14
DiMel_77
08.10.25
✎
10:14
|
(0) Я думаю, что 1С при реализации работы с регулярными выражениями использовала "VBScript.RegExp", а там есть особенность при поиске слов - декларированная граница слова \b распространяется только на слова, написанные буквами [A-Za-z].
Т.е. если искать \bsun\b - то найдет, а вот если искать \bарка\b, то нет.
|
|
15
Zombi
08.10.25
✎
10:18
|
(14) Тогда как с кириллицей быть?
|
|
16
DiMel_77
08.10.25
✎
10:43
|
|
|
17
Волшебник
08.10.25
✎
10:45
|
Qwen предлагает такие варианты:
/(?<!\w)арка(?!\w)/u
(?<![а-яА-ЯёЁ])арка(?![а-яА-ЯёЁ])
|
|
18
SilentMan
08.10.25
✎
11:13
|
(14) 1c про свои регулярки немного по другому думает (про то, на чем они основаны), но кого это волновало :)
Ну и там еще есть параметр, который управляет поведение \b
RTFM? https://its.1c.ru/db/v83doc#bookmark:dev:TI000002650
|
|
19
Волшебник
08.10.25
✎
11:17
|
(18) 👍 Вот это уже пруф!
|
|
20
Timon1405
08.10.25
✎
11:28
|
(0) regex101 все работает, переключитесь в ветке FLAVOR слева на диалект .NET
СтрПодобнаПоРегулярномуВыражению возвращает совпадение или нет по шаблону ЦЕЛОЙ исходной строки
вместо него
используйте СтрНайтиПоРегулярномуВыражению
(17) мимо, в vbscript нет ретроспективных проверок
|
|
21
Zombi
08.10.25
✎
11:34
|
(17) Не работают эти варианты. Проверил.
|
|
22
Zombi
08.10.25
✎
11:37
|
(20) А так заработало. Спасибо.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший