Регулярные выражения в Delphi XE

Начиная с версии XE, в Delphi появились регулярные выражения. То есть, при помощи сторонних продуктов работать ними можно было и раньше, но теперь соответствующий юнит появляется вместе с установкой Delphi. Вот примеры использования.

Имеется ли вхождение? Да, имеется.

{$APPTYPE CONSOLE}
uses RegularExpressions;
begin
  if TregEx.IsMatch('eksaek647dl', 'ek\d+') then
    WriteLn('Yes')
  else
    WriteLn('No')
// Yes
end.


А теперь нет - не тот регистр букв.

{$APPTYPE CONSOLE}
uses RegularExpressions;
begin
  if TregEx.IsMatch('eksaek647dl', 'ek\d+') then
    WriteLn('Yes')
  else
    WriteLn('No')
// No
end.


Игнорируем регистр букв - опять найдено.

{$APPTYPE CONSOLE}
uses RegularExpressions;
begin
  if TregEx.IsMatch('eksaeK647dl', 'ek\d+', [roIgnoreCase]) then
    WriteLn('Yes')
  else
    WriteLn('No')
// Yes
end.


Находим все вхождения.

{$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.


Или, что то же самое, но в другом режиме использования, удобном, когда много строк проверяется на одно и то же регулярное выражение.

{$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.

Замена и разбиение строк.

{$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.
Теги:
TRegEx
Добавлено: 16 Мая 2015 17:40:22 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...