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
Похожие статьи: