先日から使っている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円です。」と表示されました。