Регулярные выражения (RegExp) в 1С

 

Регулярные выражения — это удобнейшая вещь для решения многих задач по анализу какого-либо текста. К сожалению встроенный язык не предоставляет «родных» инструментов для работы с регулярными выражениями.

Но не все так плохо — никто не мешает использовать встроенный в Windows (в Windows 98 и выше) объект — VBScript.RegExp.

Весь приведенный ниже код работает как в версии 7.7 так и версиях 8.x.

Единственным отличием 7.7 от 8.x является строка создания объекта.

7.7.:

8.x:

Кроме этого, для полного сходства кода в разных версиях, в коде версии 7.7 полезно определить вот такие переменные:

Хотя во многих конфигурациях эти переменные определены как глобальные.

Ниже описаны свойства и методы объекта VBScript.RegExp.

Свойства:

  • Global. Ложь — искать до первого нахождения, Истина — искать во всем тексте. Значение по умолчанию — Ложь;
  • IgnorCase. Ложь — учитывать регистр символов, Истина — не учитывать регистр символов. Значение по умолчанию — Ложь;
  • Multiline. Ложь — однострочный объект, Истина — многострочный объект. Это свойство влияет на работу метасимволов ^ и $. Значение по умолчанию — Ложь;
  • Pattern. Строка используемая как шаблон регулярного выражения. Чаще всего, говоря о регулярном выражении, люди имеют ввиду именно шаблон. О том, как составлять шаблоны можно узнать, например, тут.

Методы:

  • Test(СтрокаТекста). Метод проверяет переданную в параметре строку на соответствие шаблону (например проверка корректности адреса эл. почты). Возвращаемые значение: Ложь — строка соответствует шаблону, Истина — строка не соответствует шаблону;
  • Replace(СтрокаТекста, СтрокаЗамены). Ищет соответствующие шаблону вхождения в первом параметре (СтрокаТекста) и заменяет их на значение второго параметра (СтрокаЗамены). Возвращаемые значения: измененный (возможно) параметр СтрокаТекста;
  • Execute(СтрокаТекста). Ищет соответствующие шаблону вхождения в параметре СтрокаТекста. Возвращаемые значения: коллекция найденных подстрок.

Для составления, тестирования и отладки шаблонов регулярных выражений существует огромное количество специализированного софта, например, RegexBuddy. Кроме этого, простенький отладчик регулярных выражений для 1С был рассмотрен в недавнем обзоре материалов сайта infostart.ru.

 

Следующий пример ищет HTML теги в строке:

Использование в шаблоне круглых скобок (группировки) задействует коллекции SubMatces. Изменим шаблон в предыдущем примере таки образом:

Будут найдены не только теги, но и текст до и после тега. Для обработки такого шаблона, код будет выглядеть так:

Еще пример — простая функция для проверки корректности адреса электронной почты:

Если регулярные выражения используются часто, то будет разумно написать некую оболочку. Основные позиции таковы:

  • Глобальная переменная, являющаяся объектом VBScript.RegExp;
  • Инициализация глобальной переменной при запуске конфигурации или функция инициализации вызываемая по необходимости;
  • Инкапсуляция методов объекта VBScript.RegExp.

На этом все, надеюсь данный материал Вам помог.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 3, средняя оценка: 3,67 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Сергей Ожерельев

    Функцию инициализации достаточно вставить в общий модуль с повторным использованием возвращаемых значений и тогда не потребуется глобальных переменных.
    Вот пример из разрабатываемой сейчас конфы, где я активно использую регулярки.

    Функция RegExp(Знач ШаблонВыражения = «») Экспорт

    СистемнаяИнформация = Новый СистемнаяИнформация();
    Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
    ИмяМакета = «ОбщийМакет.enRex32»;
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
    ИмяМакета = «ОбщийМакет.enRex64»;
    КонецЕсли;

    Попытка
    КодВозврата = ПодключитьВнешнююКомпоненту(
    ИмяМакета,
    «RegEx»,
    ТипВнешнейКомпоненты.Native);
    Исключение
    Возврат Ложь;
    КонецПопытки;

    Если Не КодВозврата Тогда
    Возврат Ложь;
    КонецЕсли;

    Возврат Новый(«V8RegEx», ШаблонВыражения);

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

  2. Дмитрий

    слово «И» нельзя использовать как итератор цикла — это зарезервированное слово

  3. Алексей

    Я делал через схему xdto, без внешних компонентов. Могу показать, как.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: