- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
В этом уроке мы с вами поговорим о регулярных выражениях в Delphi, а именно RegExpr.
Очень часто, создавая свои программы требуется спарсить информацию с интернета. Например, баланс с сайта кошелька, или кол-во баллов и тд. Этот процесс называется парсинг.
Т.е в этом уроке мы научимся парсить информацию с помощью регулярных выражений RegExpr.
Но для начала нам нужно установить RegExpr в Delphi.
Как установить?
Для установки и подключения модуля необходимо поместить файл regexpr.pas в папку с нашим проектом.
У меня путь такой:
Код:
C:\Program Files\Borland\Delphi7\Lib)
Т.е Создаем новый проект, нажимаем File -> Save Project As -> <Ваша папка>.
И в эту папку кладем скачанный нами файл regexpr.pas
Как использовать?
Теперь нужно объявить переменную класса TRegExpr. После этого присваиваем свойству InputString текст, в котором будет осуществляться поиск по определенной маске. А саму маску задаем в свойстве Expression.
В классе TRegExpr есть некая функция Exec которая выполняет поиск по тексту.
Если найдены соответствия, то ф-ия выдает значение true.
Если соответствия отсутствуют, то выдает значение false.
Получить текст, который соответствует маске можно с помощью переменной Match[1], где [1] — ID.
Ну а теперь перейдем к практике. Мы будем парсить из некого текста <a href="">Site name</a> — саму ссылку [ или название Site name.
Создадим новый проект, кинем на форму кнопку, создадим событие кнопки OnClick и пишем следующее:
Код:
var
RegExp: TRegExpr;
begin
RegExp := TRegExpr.Create;
RegExp.InputString :='<a href="http://domain.com">Site name</a>';
RegExp.Expression := 'href="(.*?)">(.*?)<';
if RegExp.Exec then
begin
ShowMessage(RegExp.Match[1]);
ShowMessage(RegExp.Match[2]);
end;
RegExp.Free;
RegExp: TRegExpr — объявляем переменную RegExp класса TRegExpr.
RegExp := TRegExpr.Create — активируем переменную RegExp.
RegExp.InputString :='<a href="">Site name</a>' — задаем значение свойству InputString.
RegExp.Expression := 'href="(.*?)">(.*?)<' — указываем маску в свойстве Expression.
if RegExp.Exec then — если ф-ия Exec находит совпадения по маске, то.
ShowMessage(RegExp.Match[1]) — показывает в сообщении первый результат.
ShowMessage(RegExp.Match[2]) — второй результат.
Аналог preg_match_all или как вывести все совпадения?
Для того, чтобы получить не только первое совпадение, но и все последующие, можно использовать следующую конструкцию:
Код:
procedure TForm1.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;
Вложения
-
25.5 КБ Просмотры: 4