Open tormozit opened 1 year ago
// Преобразует строку для использования в регулярных выражениях путем экранирования управляющих символов.
// Параметры:
// Текст - Строка.
// Возвращаемое значение:
// Строка - для вставки в регулярные выражения.
Функция ТекстДляРегВыраженияЛкс(Знач Текст) Экспорт
СтрокаСлужебныхСимволов = "\[]^$()?*+.|{}"; // "\" должен быть первым
Для Счетчик = 1 По СтрДлина(СтрокаСлужебныхСимволов) Цикл
СпецСимвол = Сред(СтрокаСлужебныхСимволов, Счетчик, 1);
Текст = СтрЗаменить(Текст, СпецСимвол, "\" + СпецСимвол);
КонецЦикла;
Возврат Текст;
КонецФункции
https://partners.v8.1c.ru/forum/t/2132299/m/2132299 Для строковых функций поиска проблема учета регистра букв не стоит остро, т.к. перед их вызовом можно привести обе строки к нижнему регистру: • Найти • СтрНайти • СтрНачинаетсяС Но для модифицирующих функций • СтрЗаменить • СтрНайтиИВыделитьОформлением Проблема учета регистра букв стоит остро, т.к. на выходе нужен текст, в котором изменены будут только заданные фрагменты. В остальной части регистр букв должен быть сохранен.
В 8.3.23 после многих лет ожиданий мы получили функцию СтрЗаменитьПоРегулярномуВыражению, которая формально поглощает СтрЗаменить() и позволяет управлять игнорированием регистра букв. Но чтобы через нее написать полный аналог СтрЗаменить() как минимум нужно выполнить экранирование всех спецсимволов в искомой строке, что делает такое решение неудобным и небыстрым.
Поэтому я все же желаю, чтобы в простой и быстрой функции СтрЗаменить() появился параметр для игнорирования регистра букв.