- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
Элементарно
Код:
//uses RegularExpressions
...
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
RegEx:=TRegEx.Create('Hello');// Определяем то, что ищем, собственно регулярное выражение
//Далее определяем текст, в котором ищем
if RegEx.IsMatch('Hello world') then form2.Caption:='match';
end;
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
RegEx:=TRegEx.Create('^H[\w]+o\b');
if RegEx.IsMatch('Hello world') then form2.Caption:='match';
end;
^H говорим машине, что в начале искомого текста (рег. выражения) должна быть большая латинская H
[\w]+ эта часть означает, что далее возможны любые буквенные или цифровые символы или знак подчеркивания
o\b – эта часть говорит машине, что в конце искомого слова должен быть символ o
Регулярные выражения без создания экземпляра класса
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
if RegEx.IsMatch('Hello world','^H[\w]+o\b') then form2.Caption:='match';
end;
К сожалению, если написать аналогичную конструкцию с метасимволами на русском языке, то всё это удовольствие не сработает.
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
if RegEx.IsMatch('Привет мир','^П[\w]+т\b') then form2.Caption:='match';
end;
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
if RegEx.IsMatch('Привет мир','^П[A-Яа-я]') then form2.Caption:='match';
end;
Отлавливаем email…
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
if RegEx.IsMatch
('sometext someemail12@gmail.com sometext','[\w-.]+@([\w-]+(.[\w-]+)+)')
then form2.Caption:='match';
end;
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx:TRegEx;
begin
if RegEx.IsMatch
('http://digital-flame.ru/',
'(http|ftp)://([\w\d-]+(.[\w\d-]+)+)(([\w\d-=?\./]+)+)*')
then form2.Caption:='match';
end;
- (http|ftp):// – опишем возможные протоколы. Любой адрес для обращения к узлу с помощью протокола http или ftp должен начинаться с http:// или ftp:// соответственно. В скобках я указываю сначала приставку http, затем вертикальную черту, которая соответствует логическому ИЛИ и уже после нее вторую возможную приставку – ftp. В итоге наш шаблон будет срабатывать как на ссылки ftp ресурсов, так и http.
- ([wd-]+(.[wd-]+)+) – вот таким образом можно описать адрес узла. Данная конструкция будет одинаково хорошо срабатывать и на адреса вида – т.е. IP адрес, как и на символьные адреса. Скобками группируем условия, т.к. если просто написать диапазон литералов в одном классе и поставить метасимвол +, то выражение не будет правильно работать. Ради эксперимента советую поупражняться и попробовать составить другой шаблон.
- (([wd-=?\./]+)+)* – поскольку линк может вести на какой-нибудь файл, то мы обязаны это предусмотреть. В пути могут присутствовать различные символы: «/», «?», «=» и т.д. Поскольку часть из них являются метасимволами, то мы должны их экранировать – поставив перед ними еще один слеш. Установив шаблон можно открывать наш файл, запускать перебор по строкам, получая результат поиска. Для большей информативности, я показываю количество найденных совпадений в одном из label.

Нулевая группа это все выражение в целом, далее все то, что идет в скобках. То есть в примере выше это “gmail.com” и “.com”, что соответствует частям регулярного выражения ([\w-]+(.[\w-]+)+) и (.[\w-]+)+) соответственно.
Код:
ListBox1.Items.Add(RegEx.Replace(Memo1.Text,'B'));
Код, который я использовал
Код:
procedure TForm2.Button1Click(Sender: TObject);
var RegEx: TRegEx;
Options: TRegExOptions;
M: TMatchCollection;
i,j:integer;
begin
//определяем необходимые опции
Options:=[]; // Опции я так нигде и не использовал
ListBox1.Items.Clear;
//создаем объект
RegEx:=TRegEx.Create(Edit1.Text);
//Если найдено хотя бы обно совпадение продолжаем работу
if RegEx.IsMatch(Memo1.Text)then
begin
M:=RegEx.Matches(Memo1.Text,Edit1.Text);//получаем коллекцию совпадений
for i:=0 to M.Count-1 do
begin
ListBox1.Items.Add(M.Item[i].Value);//выводим совпадение
for j:= 0 to M.Item[i].Groups.Count-1 do //если в регулярном выражении есть группы
ListBox1.Items.Add(' Группа '+IntToStr(j)+' '+M.Item[i].Groups[j].Value)
end;
//Выводим результаты работы Replace
ListBox1.Items.Add(RegEx.Replace(Memo1.Text,Evaluator));
ListBox1.Items.Add(RegEx.Replace(Memo1.Text,'B'));
end;
end;