SkRegExp version 1.5.0 公開

SkRegExp version 1.5.0 を公開しました。

変更点は以下の通りです。

    • 更新)Unicode 6.0 に対応。
    • 更新)改行文字を Unicode 改行文字に完全に統一。
      ごく一部にCRLFしか改行文字としない処理が残っていたのを削除。
    • 新規)条件付グループに使える条件として、再帰チェック、Callout、DEFINE に対応。
    • 新規)再帰パターン用スタックを追加。条件付きグループの再帰チェック用。
    • 廃止)TSkRegExp クラスの以下の6つのプロパティを廃止した。
      Match, MatchPos, MatchLen, NamedGroup, NamedGroupPos, NamedGroupLen
      ただし、条件定義で無効になっているだけなので、OLD_PROPERTY を条件定義すれば利用できる。
    • 廃止)ユニコードプロパティの別名表記( p{Lu} に対する p{Uppercase_Letter} )を廃止。

これで Perl 5.10 の条件付きグループと同等になりました。

もっとも Perl はもう 5.16 になっていて新しい正規表現も加わっています。

しかし、実装したいと思うのが (?a) くらいなので 5.16 互換にするつもりは、今のところありません。

ちなみに、(?a) については TSkRegExp.DefinedCharClassLegacy プロパティを True にすれば同じことができます。(?a) ほどの柔軟性はありませんが。

今後の予定は、大文字小文字を区別しない、全角半角を区別しない、ひらがなカタカナを区別しないを構文解析の段階で処理して、正規表現エンジンを軽くしたいと思っています。

たとえば、(?iwk)オンリー と言う正規表現を [おオオ][んンン][りリリ][ーー] と書き換えれば正規表現エンジンを軽くできます。

コレはパーサーに手を加えるだけでできそうですが濁点が付いたときが厄介そうです。

(?iwk)バグ を (?:バ|ば|バ) とするのはパーサーでは無理なので、最初に別な構文解析をやらないと難しそうです。

それと、いつの間にか単純な選択(|)の処理速度が PCRE の80%に落ちてしまっていました。

コレを何とか改善したいですね。

理由はわかっています。PCRE は 複数以上の文字列に対応した QuickSearch のようなモノを使っているからです。

ただ、何というアルゴリズムかわかりません。

複数以上の文字列を高速に検索できるアルゴリズムをご存じの方は教えてください。

ま、コレができるのはしばらく先になりそうです。

では、またしばらくは静かに、バグ修正オンリーのモードに沈みます。

コメントを残す

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