Работа с регулярными выражениями в Delphi

Механизм обработки регулярных выражений находится в модуле System.RegularExpressions и состоит из одного класса и двух записей (не считая служебных компонентов).

  • TRegEx – (класс) собственно обработка регулярного выражения;
  • TMatch – (запись) представление единичного результата обработки;
  • TMatchCollection – (запись) коллекция результатов обработки (TMatch). Используется, если предполагается, что в тексте может быть несколько фрагментов соответствующих данному регулярному выражению.
Создание объекта для обработки регулярного выражения

Допустим, есть простенькое регулярное выражение для проверки адреса сайта расположенного на домене второго уровня.

Для того чтобы создать экземпляр класса TRegEx, который будет работать с ним, необходимо передать это выражение в качестве параметра конструктора.

Важно отметить, что регулярное выражение, с которым будет работать данный объект впоследствии невозможно изменить. Для работы с другим регулярным выражением потребуется создание другого объекта.

После того как объект для обработки регулярного выражения создан можно перейти к решению прикладных задач. Например, поиску соответствий или замене фрагментов текста.

Поиск соответствий

Поиск единичного совпадения осуществляется достаточно просто.

Для этого требуется передать анализируемую строку в качестве параметра метода Match, и он вернёт значение типа TMatch, если в ней имеется соответствие. При этом найденный текст будет доступен через поле Value TMatch.

Если соответствий в тексте может быть несколько, то способ реализации зависит от конкретной задачи.

Если требуется просто найти самое первое (от начала строки) соответствие, можно также воспользоваться методом Match. Он корректно отработает и при наличии нескольких соответствий, но возвратит только самое первое из них. В противном случае следует использовать метод Matches и работать с TMatchCollection,

Вызов метода Matches аналогичен методу Match.

Каждое найденное соответствие будет доступно в качестве элемента коллекции (TMatch) TMatchCollection.

Помимо вышеописанных задач при поиске соответствий может потребовать даже не сам поиск конкретных результатов, а лишь подтверждение их наличия.

Для этого служит метод IsMatch класса TRegEx. В случае наличия в анализируемой строке хотя бы одного соответствия регулярному выражению данный метод возвратит true. Также как и в предыдущих случаях, анализируемая строка передаётся в качестве параметра.

Замена фрагментов текста по регулярному выражению

Для замены фрагментов текста по регулярному выражению служит метод Replase класса TRegEx. Он принимает два строковых аргумента: анализируемую строку и строку, на которую будут заменены все соответствия данному регулярному выражению.

В примере ниже все найденные в исходной строке адреса сайтов на домене второго уровня будут заменены текстом «<здесь был адрес сайта>».

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

Класс TRegEx поддерживает разделение строки с использованием регулярного выражения для поиска мест разделения.

Разделение осуществляется при помощи метода Split, который имеет несколько перегрузок. Наиболее простая из них принимает в качестве параметра только анализируемую строку. Данный метод возвращает массив разделённых строк в формате TArray<string>.

Однако работа этого метода имеет одну особенность. Он не всегда корректно обрабатывает пробелы и управляющие символы. Поэтому перед дальнейшим использованием строк, полученных в результате, может потребоваться удаление лишних  символов при помощи функции Trim.

Ниже приведён пример разделения строк по регулярному выражению с использованием функции Trim.

Несмотря на все неудобства стандартные средства Delphi для работы с регулярными выражениями, всё же в состоянии решать весь спектр задач связанных с ними. Это позволяет снять необходимость использования сторонних библиотек, а также «изобретения велосипедов». Что в немалой степени облегчает труд  разработчика.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *