SkRegularExpressions.pas version 0.7 公開

SkRegularExpressions.pas version 0.7 を公開しました。

Replace、Split で、空文字にマッチする正規表現を指定すると置換がおかしくなる問題を修正しました。

それと、Delphi 2007 の IDE から実行すると、ブレークを貼っていないのに、勝手にブレークされて止まってしまう問題は、解決はできませんが、取り敢えず問題を一箇所に閉じ込めることには成功しました。

以下の状況でこの問題は発生します。

同一メソッド内で、複数以上 TRegEx.Match メソッドを呼び出していて、かつ、Match.Groups[0].Value のように、TGroupColloction.GetItem を参照している。

次の方法で回避してください。

TRegEx.Match メソッドを1回呼び出すだけなら、Match.Groups[0].Value のように参照しても問題ありません。

TRegEx.Match メソッドを複数回以上呼び出しても、次の例のようにMatch.Groups[0] の要素を、TGroup 型変数に代入して使えば問題ありません。

var
  Match: TMatch;
  RegEx: TRegEx;
  Group: TGroup;
  I: Integer;
begin
  RegEx := TRegEx.Create('^(w+)s*=s*(w+)$');
  for I := 0 to 9 do
  begin
    Line := 'a=b' + IntToStr(I);
    Match := RegEx.Match(Line);
    if Match.Success then
    begin
      Group := Match.Groups[0];
      Writeln(Group.Value);   //Group[0].Value だとNG
      Group := Match.Groups[1];
      Writeln(Group.Value);   //Group[1].Value だとNG
      Group := Match.Groups[2];
      Writeln(Group.Value);   //Group[2].Value だとNG
    end;
  end;
end;

 


コメントを残す

メールアドレスが公開されることはありません。