В системе 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(Текст, СтрЗамена); Возврат Текст; КонецФункции
|