Задача: нужно проверять строку на наличие различных слов (масса, вес, длина, ширина, высота).
Решение: понятное дело, что простой поиск по строке СтрНайти(),Найти() не подойдут, т.к. вхождение может быть частью большего слова: масса = массаж, вес = весна и т.д.
Решил использовать регулярные выражения, но и тут я обломался, т.к. регулярка \bbla\b не работает с Юникодом (кириллица), да и у 1С реализовано через ComObject(VBScript.RegExp), который принимает не все. Например параметр \i (регистронезависимость) вообще не принимает, в данном случае это параметр самого объекта (IgnoreCase), а не шаблона. В итоге использовав примеры гугла и поправки на VBScript.Regexp пришел к такой конструкции:
"(^|[^А-Яа-яA-Za-z])(вес|масса)([^А-Яа-яA-Za-z]|$)"
Собственно разобрать такое легко:
(НачалоСтроки ИЛИ НеБуква(англ и кириллица)) И (вес ИЛИ масса) И (НеБуква ИЛИ КонецСтроки)
Для моей задачи подходит, мне нужно получить булево, а не замену. У данного варианта есть минусы, для меня не существенные:
- Любой небуквенный символ, предшествующий или последующий, попадает под шаблон, например "рполрволпва .вес. выраорл" вернет не "вес", а ".вес."
- Не работает с языками отличными от русского и английского
Комментариев нет:
Отправить комментарий