SkRegExpの修正が続く理由

SkRegExp の修正が毎日のように行なわれていますが、実は、新バージョンを準備中です。

新しい機能のテストプログラムを書いたら、その副作用でバグが見つかるという状況です。

いつモチベーションがなくなるかわからないので、修正できたところはスグに公開するようにしています。

メジャーバージョンアップをやり損ねているので次回は何としても2.0にします。

2.0なので思い切って変えることにしました。

非推奨の次の6つのプロパティはなくなります。

Match, MatchPos, MatchLen, NamedGroup, NamedGroupPos, NamedGroupLen

TSkRegExp クラスに Find メソッドを追加します。これ一つで、Exec、ExecNext、ExecPos のすべての処理ができます。

繰り返しマッチさせるとき、今までは次のように書いていました。

RegExp.Expression := 'd{3}-d{4}-d{4}';
if RegExp.Exec(AInputStr) then
begin
repeat
ADest.Add(RegExp.Groups[0].Strings);
until not RegExp.ExecNext;

Find メソッドを使うと次のように書けます。

RegExp.Expression := 'd{3}-d{4}-d{4}';
RegExp.InputString = Text;
while (RegExp.Find) do
ADest.Add(RegExp.Groups[0].Strings);

この方がすっきりしていいでしょ?

正規表現の変更としては、条件付きグループの Perl 5.10 互換を高めます。

今まで条件として使えなかった再帰チェックとDEFINEに対応します。

Perl 5.10 の「特殊なバックトラック制御記号」も対応したいですが、これは時間的に難しいかもしれません。

なお、1.3系はわかりませんが、2.0を公開しても1.4系のバグ修正は継続します。

バージョンアップすると前のバージョンは放置してましたが、今現在は新しいバージョンで発見したバグは直前のバージョンにも反映させています。

2.0の公開は10月中を予定しています。もし、10月中に公開されなかったらモチベーションが失われたと言うことなのでご容赦ください。

コメントを残す

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