Начиная с версии XE, в Delphi появились регулярные выражения. То есть, при помощи сторонних продуктов работать ними можно было и раньше, но теперь соответствующий юнит появляется вместе с установкой Delphi. Вот примеры использования.
Имеется ли вхождение? Да, имеется.
Delphi | 1
2
3
4
5
6
7
8
9
| {$APPTYPE CONSOLE}
uses RegularExpressions;
begin
if TregEx.IsMatch('eksaek647dl', 'ek\d+') then
WriteLn('Yes')
else
WriteLn('No')
// Yes
end. |
|
А теперь нет - не тот регистр букв.
Delphi | 1
2
3
4
5
6
7
8
9
| {$APPTYPE CONSOLE}
uses RegularExpressions;
begin
if TregEx.IsMatch('eksaek647dl', 'ek\d+') then
WriteLn('Yes')
else
WriteLn('No')
// No
end. |
|
Игнорируем регистр букв - опять найдено.
Delphi | 1
2
3
4
5
6
7
8
9
| {$APPTYPE CONSOLE}
uses RegularExpressions;
begin
if TregEx.IsMatch('eksaeK647dl', 'ek\d+', [roIgnoreCase]) then
WriteLn('Yes')
else
WriteLn('No')
// Yes
end. |
|
Находим все вхождения.
Delphi | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
| {$APPTYPE CONSOLE}
uses RegularExpressions;
var
m: TMatch;
begin
m := TRegEx.Match('eksaek647dlgddek43gfd','ek\d+');
while m.Success do
begin
WriteLn(m.Index, ' ', m.Length, ' ', m.value);
m := m.NextMatch;
end;
//5 5 ek647
//15 4 ek43
end. |
|
Или, что то же самое, но в другом режиме использования, удобном, когда много строк проверяется на одно и то же регулярное выражение.
Delphi | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| {$APPTYPE CONSOLE}
uses RegularExpressions;
var
re: TRegex;
mc: TMatchCollection;
i: Integer;
begin
re.Create('ek\d+');
mc := re.Matches('eksaek647dlgddek43gfd');
for i:=0 to mc.Count-1 do begin
WriteLn(mc[i].Index, ' ', mc[i].Length, ' ', mc[i].value);
end;
//5 5 ek647
//15 4 ek43
end. |
|
Обратите внимание: TRegEx это не class, а record.
Замена и разбиение строк.
Delphi | 1
2
3
4
5
6
7
8
9
10
11
12
13
| {$APPTYPE CONSOLE}
uses RegularExpressions;
var
s: String;
ar: TArray<String>;
begin
s := TregEx.Replace('55ek6saeK647dl', 'ek\d+', ' ', [roIgnoreCase]);
WriteLn(s);
// 55 sa dl
ar := TregEx.Split(s, ' s?');
// 3 a
WriteLn(Length(ar), ' ', ar[1]);
end. |
|
|