強力な正規表現#3

ショック。
やっぱり自分で使うライブラリは、ソースコード全部把握してから使わなきゃダメね。
正規表現では+や*とかを使って、ものすごく長い範囲にヒットさせる事が出来るわけだが、
TRegExpで、ものすごく長い文字列にヒットさせようとすると、
オーバーフローが起こって何の警告も出さずにアプリが落ちる事がわかった。



たぶんさ、足し算とか引き算とかで桁があふれた場合は警告出るんだろうね。
今回のオーバーフローは、正規表現ライブラリ内のとあるメソッドが、
そのメソッド自身を呼ぶことで次の文字にもマッチするかを判定しているのがマズく、
落ちた時点まででそのメソッドが自分自身を呼び出した回数は1万数千回と、
なんだか微妙なところでオーバーフローしてるのがさらに困った。
いったいどーすりゃいいんだか途方に暮れてみる。

ユニコード版のスピードが遅いと書いてある理由はおそらく、
Ansi版しかない関数と同名の関数を用意することで対応している部分だろう。
すごく遅そうなユニコード専用部分がいくつか見つかったからな。
それは速い関数を書けばいいだけで問題ではない。
ほかにもユニコードだと遅いっていう理由があるならそっちの方が問題だ。

ともかく大問題は、(.|¥n)+で、カーソル位置から文末までをマッチさせたときなど、
ながーいテキストを探すと必ず落ちるっていうことがいちばんマズい。

たぶん関連のある記事:

コメントは終了しています。