本当は仕様です

ほぼ週刊だった SkRegExp の更新が止まっていますが、決して放置しているわけではありません。

前回報告した正規表現パターン ‘A(?<foo>0g<foo>0|1g<foo>1|)z’ が ‘010010’ にマッチしないバグの修正も鋭意行っています。

というか、このバグへの対処はもう終わっています。

更新に時間がかかっているのは、再帰パターンの仕様をもう一度練り直しているからです。

たとえば、Delphi XE の TRegEx でも上記のパターンはマッチしません。

TRegEx が使っている正規表現ライブラリ PCRE では、再帰パターンの中にバックトラックしない仕様なので、マッチしないのは正解です。

SkRegExp も PCRE と同じ仕様(ヘルプ「Perl 5.10との違い」参照)なので、マッチしなくてもバグではありません。

しかし、Perl 5.10 や 鬼車 ではマッチするので、本当は仕様なんですがバグと認めたわけです。

実は、再帰パターンの中にバックトラックする Perl と 鬼車 でも、再帰パターンの動作が違います。

その辺りも時間がかかっているところです。もうしばらくお待ちください。

なお、バグと聞いて SkRegExp を敬遠する人に言っておきます。

このバグは、バックトラックする再帰パターンで起こるバグです。

全ての正規パターンで起こるバグではありませんし、このバグ(仕様)は他に悪影響を与えるものでもありません。

本当は仕様です」への1件のフィードバック

  1. 小宮秀一

    自己レス失礼
    >TRegEx が使っている正規表現ライブラリ PCRE では、
    >再帰パターンの中にバックトラックしない仕様なので、
    >マッチしないのは正解です。
    ちなみに、A と z をはずすと、マッチはするんですが、Perl や鬼車とは異なります。

    返信

コメントを残す

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