WorkToolSmith

Delphi2007で正規表現 テンプレートで置き換え

太田アベル

・ 更新 ・ 2分で読めます

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

先日から使っているTRegExprですが、Delphi2007でも特に問題は起こっていません。

やはりクラスはコード内に適当に入れて動くので、 コンポーネントよりも小回りが聞くときが多いですね。

その機能の一つに( )で囲んでマッチした文字列をテンプレートとなる文字列に埋め込んで出力するものがあります。これは便利!

ということで使い方

当たり前ですが、使う前にRegExprをusesに入れてください。

procedure TForm1.Button1Click(Sender: TObject);

const

SearchTxt = '(\d+)';

Template = '金額は$1円です。';

var

r : TRegExpr;

begin

r := TRegExpr.Create;

try

r.Expression := SearchTxt;

if r.Exec ('あなたが買った品物は\5250です。') then

ShowMessage(r.Substitute (Template));

finally

r.Free;

end;

end;

これだけで「あなたが買った品物は\5250です。」から5250を抽出し、「金額は5250円です。」と表示します。

Execが成功すると( )で囲んだ文字が1~nで記憶されます。先頭は0ではなく1ということに注意。

0はマッチした文字列全体になりますので、たとえば

procedure TForm1.Button1Click(Sender: TObject);

const

SearchTxt = '(\d+).*?(\d+)';

Template = '金額は$0円です。';

var

r : TRegExpr;

begin

r := TRegExpr.Create;

try

r.Expression := SearchTxt;

if r.Exec ('あなたが買った品物は\5250と\8540です。') then

ShowMessage(r.Substitute (Template));

finally

r.Free;

end;

end;

こんな風にした場合、$0を入れると「金額は5250と\8540円です。」となってしまいます。

テンプレートを$1もしくは$2にすれば、この場合は金額が入ってくるわけですね。

Template = ‘金額は$1円と$2円です。’;とすれば、無事に「金額は5250円と8540円です。」と表示されました。

太田アベル

太田アベル

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

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

こちらもおすすめ