Возможность работы с регулярными выражениями в Delphi «из коробки» впервые появилась в Delphi XE. Именно в этой версии в делфи работа с регулярными выражениями была организована с использованием библиотеки, входящей в официальную версию, что, безусловно, упростило жизнь delphi-разработчикам.
Основная информация по компоненту | ||
Исходник официального примера и документация | DocWiki |
Регулярные выражения — это строки поиска, в которых определенные символы (символы) имеют особое значение.
Демонстрационный пример показывает основы работы с регулярными выражениями в Delphi. На форме приложения расположены следующие элементы управления:
- EditText: TEdit — поле ввода строки для проверки его на соответствие регулярному выражению;
- Button1: TButton — кнопка для запуска проверки;
- lbRegExp: TListBox — список выбора регулярного выражения;
- MemoRegEx: TMemo — поле для показа выбранного регулярного выражения;
Внешний вид демонстрационного приложения представлен на рисунке ниже:
Демонстрационный пример
Используя этот демонстрационными пример Delphi мы можем с помощью регулярных выражений проверить: адрес электронной почты, IP-адрес и два вида интервала дат. Для проверки используется класс TRegEx и его классовая функция IsMatch.
Проверка строки на соответствие регулярному выражению происходит следующим образом:
procedure TForm1.Button1Click(Sender: TObject); begin if TRegEx.IsMatch(EditText.Text, MemoRegEx.Lines.Text) then ShowMessage('Text DOES match the regular expression') else ShowMessage('Text DOES NOT match the regular expression'); end;
Выбор в списке TListBox очередного элементы приводит к тому, что в Memo выводится регулярное выражение:
procedure TForm1.lbRegExpClick(Sender: TObject); begin case lbRegExp.ItemIndex of 0: begin lbType.Caption := 'Email for validation'; MemoRegEx.Lines.Text := '^((?>[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+\x20*' + '|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\' + 'x20*)*(?<angle>< ))?((?!\.)(?>\.?[a-zA-Z\d!' + '#$%&''*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\' + '-]+(?< !-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)' + '(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\' + 'd\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|' + '\\[\x01-\x7f])+)\])(?(angle)>)$'; end; 1: begin // Accept IP address between 0..255 lbType.Caption := 'IP address for validation (0..255)'; MemoRegEx.Lines.Text := '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\' + '.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'; end; 2: begin // Data interval format mm-dd-yyyy lbType.Caption := 'Date in mm-dd-yyyy format from between 01-01-1900 and 12-31-2099'; MemoRegEx.Lines.Text := '^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[' + '01])[- /.](19|20)\d\d$'; end; 3: begin // Data interval format mm-dd-yyyy lbType.Caption := 'Date in dd-mm-yyyy format from between 01-01-1900 and 31-12-2099'; MemoRegEx.Lines.Text := '^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[01' + '2])[- /.](19|20)\d\d$'; end; end; end;</angle>
При подготовке статьи использовалась информация со следующих ресурсов:
- Официальный репозиторий демонстрационных примеров Delphi на SourceForge
- Информация по работе с регулярными выражениями в Delphi на сайте Embarcadero