強力な正規表現#5
アプリが落ちる話なので、言いがかりだと言われないように、やり方を明確にしておく。
-(半角のマイナス)を8000文字入力する。コピペでも良い。
なぜ8000かというと、欠陥のあるライブラリでも数百ぐらいだとまだ耐えるからだ。
マイナスには特に意味はないが、改行が含まれると検索出来ない物もあるのでダメ。
で、8000文字入力したら先頭1文字目に入力位置をあわせ、
正規表現で(.|¥n)+を検索する。あえて全角で書いたがもちろん半角で。
すると、正常に動作する場合は、入力した8000文字が全て選択される。
真魚はTRegExprの正規表現を使っているが、2000~3000文字で落ちる。
で、よそのテキストエディタではどうなるかって。
EmEditor、GreenPad、萌ディタ>正常動作
正規表現の実装は独自。
JmEditor>落ちる
BREGEXP.DLLを使用。
K2Editor>落ちる
BREGEXP.DLLに変更を加えた独自DLL使用。
サクラ+Jm付属のDLL>落ちる
こんな感じで、TRegExprやBREGEXPに頼って正規表現を実装した物は落ちる。
萌ディタの開発日記によると、WZも落ちるんだってさ。
原因は、再帰しすぎのスタックオーバーフローで、
編集中のデータを保存するか聞かれるわけでもなく、いきなり落ちるのでタチが悪い。
付け焼き刃な応急処置ではあるが、再帰の回数を数えて限界点でやめさせるようにしてみた。
これだと(.|¥n)+で検索しても落ちないけど、途中までしかヒットしなくなる。
落ちないような処理をしてるエディタもあるんだから、落ちない処理に変えなきゃいけないな。
本当はそうしなきゃいけないってわかってるけど、知力がついていかない。
あのさ、TRegExprの変数の名前の付け方とか、インデントの仕方とか、
慣れてるやり方とはかけ離れているってことも理解できない一因なんだよ。
あと、コンパイラに対する命令の多さも。
たしかに正規表現のロジックがわからないのが一番つらいけど、
それ以前に理解を妨げる要素がたくさんあるので、わかるようにどんどん書換中。