Регулярные выражения (RegEx) - мощный инструмент для поиска, сопоставления и манипулирования текстом. В Delphi и Pascal существует несколько библиотек для работы с RegEx, предоставляющих различную функциональность и уровень совместимости с другими реализациями.
В этой статье мы рассмотрим простой пример использования регулярных выражений в Delphi, опираясь на опыт Gustavo 'Gus' Carreno, который поделился своим проектом "Test Regular Expressions". Мы рассмотрим использование библиотеки RegExpr, входящей в стандартную поставку Free Pascal.
Что такое RegExpr?
RegExpr - это библиотека для работы с регулярными выражениями, написанная на чистом Object Pascal. Она предоставляет широкие возможности для поиска, замены и разбиения текста на основе заданных шаблонов. Хотя она не является 100% совместимой с Perl Compatible Regular Expressions (PCRE), она предлагает достаточную функциональность для большинства задач и имеет преимущество в виде полной реализации на Pascal.
Простой пример использования RegExpr (Exec/ExecNext)
Проект Gustavo 'Gus' Carreno фокусируется на демонстрации функций Exec и ExecNext. Эти функции позволяют последовательно находить все соответствия регулярному выражению в заданной строке.
Вот пример кода на Delphi, демонстрирующий использование Exec и ExecNext:
uses
RegExpr;
procedure TestRegExpr(const InputString, Pattern: string);
var
RegEx: TRegExpr;
begin
RegEx := TRegExpr.Create;
try
RegEx.Expression := Pattern;
if RegEx.Exec(InputString) then
begin
Writeln('Найдено соответствие:');
repeat
Writeln(' Соответствие: ', RegEx.Match);
Writeln(' Позиция: ', RegEx.MatchPos);
Writeln(' Длина: ', RegEx.MatchLen);
until not RegEx.ExecNext;
end
else
begin
Writeln('Соответствий не найдено.');
end;
finally
RegEx.Free;
end;
end;
begin
TestRegExpr('This is a test string with numbers 123 and 456.', '\d+'); // Ищем числа
Readln;
end.
В этом примере:
Мы создаем экземпляр класса TRegExpr.
Устанавливаем свойство Expression в наше регулярное выражение (в данном случае, \d+ - "одна или более цифр").
Вызываем функцию Exec, чтобы найти первое соответствие в InputString.
Если соответствие найдено, мы выводим информацию о нем (само соответствие, позицию и длину).
Используем цикл repeat...until с функцией ExecNext для поиска всех последующих соответствий.
В блоке finally освобождаем память, выделенную для TRegExpr.
Альтернативные решения: libpcre
Thaddy упоминает о библиотеке libpcre, которая предоставляет привязки к стандартным библиотекам Perl Compatible Regular Expressions (PCRE). libpcre предлагает более высокую степень совместимости с PCRE, но, как отмечает Thaddy, на момент обсуждения она находилась в стадии разработки и требовала ручной сборки бинарных файлов.
Когда использовать libpcre?
Если вам требуется полная совместимость с синтаксисом PCRE.
Если вы готовы к ручной сборке библиотеки и решению возможных проблем совместимости.
Когда использовать RegExpr?
Если вам нужна простая в использовании и полностью реализованная на Pascal библиотека.
Если вам не требуется 100% совместимость с PCRE, и функциональности RegExpr достаточно для ваших задач.
Если вы хотите избежать проблем с зависимостями и ручной сборкой.
Другие возможности RegExpr
Помимо Exec и ExecNext, RegExpr предоставляет функции для замены текста (Substitute) и разбиения строки на части (Split) на основе регулярного выражения. Эти функции позволяют выполнять более сложные операции с текстом.
Заключение
Регулярные выражения - ценный инструмент для разработчиков на Delphi и Pascal. Библиотека RegExpr предоставляет простой и эффективный способ работы с RegEx, особенно для задач, не требующих полной совместимости с PCRE. Для более сложных сценариев, требующих максимальной совместимости, можно рассмотреть libpcre, но следует учитывать ее текущий статус и возможные сложности с настройкой. Выбор библиотеки зависит от конкретных требований вашего проекта. Не забудьте ознакомиться с документацией TRegExpr Class (https://regex.sorokin.engineer/tregexpr) для получения более подробной информации о возможностях библиотеки.
В статье представлен пример использования библиотеки RegExpr в Delphi для тестирования регулярных выражений, демонстрирующий поиск соответствий в тексте с помощью функций Exec и ExecNext.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.