SkRegExp version 3.0.3 公開

SkRegExp version 3.0.3 を公開しました。

次のバグを修正しました。

  • 修正)戻り読みの中で選択(|)を使った正規表現パターンで Access violation が出るバグを修正。
    TRETrieList.Add 内のハッシュテーブルでキーが重複したときの処理が間違っていた。
  • 修正)戻り読みの中で選択(|)を使った正規表現パターンでマッチしないことがあるバグを修正。

    最適化すべきでない部分を最適化していたため。

  • 修正)選択(|)の際、最適化が効かなくなるバグを修正。
    TRENFA.GenerateStaeteList メソッドでリテラル文字の開始位置を正しく計算していなかった。

SkRegExp version 3.0.3 はこちらからダウンロードできます。

“SkRegExp version 3.0.3 公開” への2件の返信

  1. skRegExp を使用させていただいています。
    いままで Delphi XE2 で、2.6.1 を使っていました。
    久しぶりに3.0.3にバージョンアップしたところ、動作が変わっていました。
    これは仕様なのか、正規表現初心者の私にはわからないので、バグかも?と思いコメントします。
    以下、動作が変わるサンプルです。

    var R: TSkRegExp;
    begin
    R := TSkRegExp.Create;
    R.Expression := ‘#.+?#|$.+?$|rn’;
    R.Options := [roMultiLine];
    R.Exec(‘ああああ$いいいい$’#$0d#$0a’うううう#ええええ#’#$d#$0a’おおおお’);
    repeat
    ShowMessage(R.Groups[0].Strings);
    until not R.ExecNext;
    end;

    $いいいい$ と #$0d#$0a と #ええええ# と #$0d#$0a の4つにマッチするのが正しいと思っていました。
    2.6.1 だと4回ShowMessage が実行され、希望通りの動作です。
    3.0.3 だと2回で、$いいいい$ と #ええええ# にのみマッチし、#$0d#$0a にはマッチしません。
    3.0.3では $いいいい$ の直後にスペースを1文字入れると最初の #$0d#$0a にはマッチします。
    使用方法が間違っていますでしょうか?

コメントを残す

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