Delphi→ Регулярные выражения RegExpr

Окт 29, 2010


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

Установка

Для установки и подключения модуля необходимо поместить файл regexpr.pas в папку с проектом, а в директиве uses добавить RegExpr.

Использование

Для начала необходимо объявить переменную класса TRegExpr и создать его экземпляр. После этого присваиваем свойству InputString текст, в котором будет осуществляться поиск по определенной маске. Эту маску, или как его еще называют, шаблон помещаем в свойство Expression.

Функция Exec выполняет поиск по тексту: если с условием шаблона что-либо совпадает, то функция вернет true, или false при несовпадении, соответственно. Получить текст удовлетворяющий маске можно из переменной Match[1].

procedure TfrmMain.FormCreate(Sender: TObject);
var
RegExp: TRegExpr;
begin
 RegExp := TRegExpr.Create;
 RegExp.InputString := 'Delphi <a href="tdlite.exe">download</a> ';
 RegExp.Expression := 'href="(.*?)">(.*?)<';
 if RegExp.Exec then
 begin
  ShowMessage(RegExp.Match[1]); {"tdlite.exe"}
  ShowMessage(RegExp.Match[2]); {"download"}
 end;
 RegExp.Free;
end;

Аналог preg_match_all

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

procedure TfrmMain.FormCreate(Sender: TObject);
var
RegExp: TRegExpr;
begin
 RegExp := TRegExpr.Create;
 RegExp.InputString := 'Delphi <a href="tdlite.exe">download</a>JavaScript<a href="js.exe">download</a> ';
 RegExp.Expression := 'href="(.*?)"';
 if RegExp.Exec then
 repeat
  ShowMessage(RegExp.Match[1]);
 until not RegExp.ExecNext;
 RegExp.Free;
 end;

Одиночная кавычка

Внимательный читатель заметит, что в регулярке не получится воспользоваться символом одиночной кавычки . Вместо неё можно использовать цифровой код символа #39.

Пример использования

RegExp.Expression := 'href='#39'(.*?)'#39; {href='(.*?)'}

Заключение

В остальном работа с регэкспами практически схожа с их реализацией в других языках, таких как PHP, Perl и т.д.
Скачать regexpr.zip

Похожие статьи:

  1. Функции кодирования Base64
  2. Компонент Antigate для Delphi
  3. Количество элементов в IEnumVARIAN

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

Ваш адрес email не будет опубликован.