1CLenta.ru  

Поиск подстрок по регулярному выражению в 1С

Программирование системы     29.04.2016 10:56     12918

В системе 1С, для поиска и замены подстрок можно использовать регулярные выражения. Для этого следует
применять специальные COM объекты, например "VBScript.RegExp". Данный объект встроен в современные
версии операционных систем Windows.

Благодаря COM-объекту "RegExp", в тексте можно найти или заменить подстроки по шаблонам разной сложности.
Шаблон(Pattern) - это логическое выражение по которому осуществляется поиск подстрок. Ещё
такие выражения называют масками. COM-объект "RegExp" позволяет не только искать подстроки, а также заменять искомые выражения. С помощью регулярных выражений можно проверить email на корректность, заменять подстроки, и.т.д.

Функция поиска по регулярному выражению


Пример
Текст = "На складе, 123 единицы товара"
Шаблон = "[0-9]+"
Результат = Массив( [0]=>Массив( [0]=>"123" ) )


Данная функция возвращает многомерный массив результатов поиска по регулярному выражению.
Функция НайтиПодстроки(Шаблон, Текст)

RegExp = Новый COMОбъект("VBScript.RegExp");

//Поиск всех вхождений шаблона
RegExp.Global = Истина;

//Игнорировать регистр символов
RegExp.IgnoreCase = Истина;

//Многострочный режим
RegExp.MultiLine = Ложь;

RegExp.Pattern = Шаблон;
Matches = RegExp.Execute(Текст);

МассивЗначений = Новый Массив();

Для каждого StrMatches Из Matches Цикл

СубМассивЗначений = Новый Массив();
СубМассивЗначений.Добавить(StrMatches.Value);

Если ТипЗнч(StrMatches.SubMatches) = Тип("COMОбъект") Тогда

Для каждого StrSubMatches Из StrMatches.SubMatches Цикл
СубМассивЗначений.Добавить(StrSubMatches);
КонецЦикла;

КонецЕсли;

МассивЗначений.Добавить(СубМассивЗначений);

КонецЦикла;

Возврат МассивЗначений;

КонецФункции

Функция поиска и замены по регулярному выражению


Пример
Текст = "На складе, 123 товара"
Шаблон = "([0-9]+)"
СтрЗамена = "$1 единицы"
Результат = "На складе, 123 единицы товара"
($1, $2, $n - подстрока регулярного выражения указывается в круглых скобках )


Эта функция ищет и заменяет подстроки по регулярному выражению.
Функция ЗаменитьПодстроки(Шаблон, СтрЗамена, Знач Текст)

RegExp = Новый COMОбъект("VBScript.RegExp");

//Поиск всех вхождений шаблона
RegExp.Global = Истина;

//Игнорировать регистр символов
RegExp.IgnoreCase = Истина;

//Многострочный режим
RegExp.MultiLine = Ложь;

RegExp.Pattern = Шаблон;
Текст = RegExp.Replace(Текст, СтрЗамена);

Возврат Текст;

КонецФункции

Комментарии (0)