nobu.nakada / nifty.ne.jpさんの
<20020307011231.13B0B25FF / sharui.nakada.kanuma.tochigi.jp>から
> 現状こうなっていて実際失敗するのですが、Perlではマッチするよう
> になってるようです。
> 
>     case OP_PUSH_LOOK_BEHIND_NOT:  STAT_OP_IN(OP_PUSH_LOOK_BEHIND_NOT);
>       GET_RELADDR_INC(addr, p);
>       GET_LENGTH_INC(tlen, p);
>       q = MBBACK(encode, str, s, (int )tlen);
>       if (IS_NULL(q)) {
> 	/* I decided to too short case -> fail. ex. /(?<!XXX)a/.match("a")
> 	   If you want to change to success, replace following line. */
> 	goto fail;
> 	/* p += addr; */
>       }
> 
> $ perl -e 'print "a" =~ /(?<!XXX)a/, " ", $&, "\n"'
> 1 a

実装しているときは、どちらの仕様がよいのかわからなかったので
気分としては失敗かなあと思って、goto failにしていました。
Perlに合わせます。

私信ではないので、少し説明すると、
否定的後ろ読みの中で指定したパターンの長さに対して、
対象文字列の長さが足りないときに成功にするか失敗にするかという話です。

p(/(?<!XXX)a/ =~ "a")   # => 0

ついでながら、私はPerlをほとんど知りません。
--
小迫@ソフネック   渋谷区恵比寿1-15-1