nobu.nakada / nifty.ne.jpさんの
<20020307011231.13B0B25FF / sharui.nakada.kanuma.tochigi.jp>から
> よく調べてないのですが、逆方向に探すのではなくてlookbehindのア
> ンカーを終端として先頭からマッチさせる、というのではうまく行か
> ないでしょうか。これならExact match以外のパターンも使えそうな気
> がするのですが。
> 
> たとえば/(?=[a-z]+):/なら、/[a-z]+\z/ =~ str[0...(/:/ =~ str)]
> みたいな感じ。内部的には\zとは別の表現が必要でしょうが。

面白いアイディアなので少し考えてみました。

まず条件として、後ろ読みパターン"(?<=), (?<!)" は、全体のパターンの
先頭にのみ存在することが必要です。
(このこと自体は自明なことなのか、そうでもない使用方法があるのか、
Perlではlook-behindをどこにでも書けるのか、私にはわかりません。)

(?<=...)の直後に、本当のマッチング開始位置を変数にセットするための
命令コード(新規)を追加すれば、可変長のパターンも扱えるような気がします。
しかし問題なのは、RegexSearch(),RegexMatch()で、マッチングの開始位置を
文字列の左端ではなくオフセット位置で指定されたときです。
後ろ読みパターンが無限長なら、オフセットの値に関係なく、文字列の先頭から
マッチングしなければならなくなります。

何か良い方法があるかもしれないので、さらに考えてみます。
--
小迫@ソフネック   渋谷区恵比寿1-15-1