繰り返し内のグループのキャプチャ

SkRegExp は、繰り返しの中にグループがあると、そのグループだけでなく、すべてのグループをスタックに保存している。バックトラックしたときにキャプチャを元に戻すためだ。

マッチが確定してからキャプチャすればこんなスタックはいらない。だが、そうするには繰り返しの処理を再帰で処理する必要がある。

深い再帰が起こらないように作ったのがSkRegExp。繰り返しに再帰を使うのでは自分が納得できない。そもそも繰り返しを再帰で行うと厄介なことがいろいろあったのだ。

でも、すべてのグループを保存するのは無駄。で、昨日お知らせしたとおり、必要なグループだけで保存したバージョンを作った。

ところが!

保存すべきグループをチェックする処理が入ったため、最悪のケースでは20%くらい遅くなってしまった。と言うことで、このアイデアは却下。

保存しているのはポインタだけなので、このくらいの無駄は勘弁してください。

コメントを残す

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