06/05/09 02:06:32
>517-518,527-528
検証お疲れ様です。
こちらでも追っかけていますが、的確な検証は難しいですね。
とりあえず、>517のソースでは開始タグと同じ数だけ終了タグを入れてやれば、期待通りに動作します。
ワイルドカード最長マッチ説があるようですが、私には $NEST の方に問題があるように思えます。
例えば、<a\s*> なら期待通りに動作しますが、<a\s*><br> では誤爆する危険性がありますよね?
それと同じ事が起こっているんじゃないでしょうか。
$NEST(<a\s*>,</a>) と書くと、start match はいかにも制限された領域にあるように思えますが、
ワイルドカードにとっては見るべき後ろの文字列がある可能性があります。
Match = "$NEST((<title>)\#,\#,(</title>)\#)"
Replace = "\@"
上のようなフィルタでテストすると解りますが、$NESTは start match, end match, inner match の順に検索します。
従って、$NEST(<a\s*>,</a>) でワイルドカードが start match の最後の文字である > の次に見る文字列は
end match にある </a> ではないかと思えるのです。
もちろん、単なる仮説に過ぎませんし、それがどのように関係しているのかは想像がつきませんが…。
> どうやら(<a\s*>)+と同じような挙動をするみたいです。
これには少し疑問が残ります。
<a href=1><test><a href=2></a> のソースを>518のフィルタでテストすると、
<a href=1><test><a href=2> まで消費されますが、(<a\s*>)+ では <a href=1> までしか消費されません。