From: "K.Kosako" Date: 2001-12-28T14:41:30+09:00 Subject: [ruby-list:33061] Re: regex bug? <20011228033707.6A4401E0@helium.ruby-lang.org>から > > 文字クラスの一文字以上の閉包で,直前にその文字クラスにマッチする文字が > > ある時,かつ後ろで後方参照を使っている時,です. > > regex.cのバグと思います。 > > このようなパターンのときに、コンパイル時にbufp->stclassがセットされるために、 > re_search()の中でre_match()が一度失敗したときの次の探索開始位置を決める処理で > これを参照して不正な開始位置にしてしまうので、マッチングに失敗するようです。 > > もっと良い修正方法があるかもしれませんが。 先程の修正では、以下のような場合に失敗しました。 reg = /([ab]+a)\1/ m = reg.match("baaaa") p m あるいは、 reg = /([cz]+[a-f])\1/ m = reg.match("zcccc") p m "([..]+" から ")\1" の間に何でも書けるので、全部の命令コードを読み進めて行って、 その先に ")\1" (stop_memory, duplicateコード)の組み合わせがあるかどうかを 調べないといけないので、きちんと対処するのはちょっと手間かも。 -- 小迫@ソフネック 渋谷区恵比寿1-15-1