WorkToolSmith

Delphi XE2の正規表現「System.RegularExpressions」を試す

太田アベル

・ 更新 ・ 3分で読めます

当サイトの記事には広告リンクが含まれる場合があります。

Delphi XEからは正規表現ライブラリが標準搭載されています。

ユニットは「System.RegularExpressions」

このライブラリを試してみたいと思います。

(2012.09.12追記 「XE2から搭載されていた」と書いていましたが、RegularExpressionはXE1から搭載されていたようです。XE1を買ってなかったので思い込みました。@arigayasさんありがとう!@arigayasさんの記事もご参照ください。)

いままでは搭載されていなかった正規表現ライブラリ

XE1までのDelphiには正規表現ライブラリは搭載されておらず、外部ライブラリを使っていました。

特に使いやすいのが小宮秀一さん作の「SkRegExp」。Perl5.8互換で、100% Delphiで書かれていて、DLLも必要としないので非常に使いやすいライブラリです。

標準搭載が必要なわけ

ただ、やはり「Delphiに標準搭載」という部分は捨てがたい魅力です。

  • 商用なので長期的なサポートが見込める
  • 新しいDelphiでも、更新を待たずに使える
  • 検索パスなどを追記しなくても良い

などです。

使い方

では使い方です。

image

このようなフォームを設計しました。

見たまんまですが、上から

  • 原文を記入する Edit1
  • 正規表現を記入する Edit2
  • 実行ボタン Button1
  • 出力を行う Memo1

となっています。

まずは uses節に「System.RegularExpressions」ユニットを加えます。
usesは以下のようになると思います。

uses

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,

  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,

  System.RegularExpressions, Vcl.StdCtrls;

次にButton1のOnClickイベントに次のコードを記入します。

procedure TForm1.Button1Click(Sender: TObject);

var

  m: TMatch;

  i: Integer;

begin

  m := TRegEx.Match(Edit1.Text, Edit2.Text);

  Memo1.Clear;

  if m.Success then

  begin

    Memo1.Lines.Add('Success');

    Memo1.Lines.Add(m.Value);

    Memo1.Lines.Add('グループ数 : ' + IntToStr(m.Groups.Count));

    for i := 0 to m.Groups.Count - 1 do

    begin

      Memo1.Lines.Add(Format('グループ%d : %s', [i, m.Groups[i].Value]));

    end;

  end

  else

    Memo1.Lines.Add('NG');

end;

コンパイルして実行(F9)してみましょう。

image「実行」ボタンを押すと、このように表示されます。

細かな解説

m := TRegEx.Match(Edit1.Text, Edit2.Text);

この部分で、正規表現チェックをします。

mはTMatch型で、Successプロパティに判定が成功したか、失敗したかが入っています。

グループにマッチした部分はGroupsプロパティに入ります。GroupsはTGroupCollection型の配列です。あとはGroups.Countの回数だけ取り出せば、すべてのグループデータが手に入ります。

ちなみにGroups[0]にはマッチした部分全体が入っています。グループそれぞれのデータは[1]から始まる点に注意してください。

今回のプロジェクトソースはこちらからダウンロードしてください。
/software/RegularExpressions.zip

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ