![]() |
|
Не работает регулярное выражение. | ☑ | ||
---|---|---|---|---|
0
Zombi
08.10.25
✎
09:41
|
Пытаюсь сделать отбор с поиском целого слова. Средствами регулярного обмена вроде должно работать так:
Если мы ищем конкретное слово, то можно использовать метасимвол \b, обозначающий границу слова. Если поставить метасимвол с обоих концов слова, мы найдем именно это слово: Regex: \bарка\b Найдет: арка Не найдет: чарка аркан баварка знахарка У меня не срабатывает. Что не так?
|
|||
1
Dzenn
гуру
08.10.25
✎
08:09
|
Давай, я спрошу у Квена вместо тебя:
https://chat.qwen.ai/s/91494cb3-1329-40cd-b2e2-5dae1fef96fe?fev=0.0.222 |
|||
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
|
(15) Интересный вопрос, но к 1С это имеет слабое отношение. Попробуйте что нибудь из этого https://ru.stackoverflow.com/questions/560989/%D0%93%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B-%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85-%D1%81%D0%BB%D0%BE%D0%B2-%D0%B2-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85-%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D1%85-javascript
|
|||
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) А так заработало. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |