06/05/10 00:58:43
>532 (517氏) と似ていますが、$NESTの start match を探す動作は
<a\s[^>]+>*</a>&&(<a\s[^>]+>(*<a\s[^>]+>)+)\0*
もしくは
<a\s*>*</a>&&(<a\s*>(*<a\s*>)+)\0*
ではないかと思います。
(*<a\s[^>]+>)+ は入れ子を探す動作です。
入れ子は存在しない場合もあるので、0回以上の繰り返しとなっています。
# 私の考えでは、start match と end match の数が同数になるように $NEST が動作していると見ています。
# end match が残り1つとなったときには、今までに読み込んだ start match を1つの start match として扱うようです。
# 入れ子は内側から解決されていくので、「今までに読み込んだ start match」として余るのは必ず外側です。
>>545
>528 の表現をよく見てください。
<a href=1> は $NEST の start match にマッチしますが、
<a href=2</a> も $NEST の start match にマッチします。
従って、$NEST(<a\s*>,</a>) では end match を探し出せず、マッチしません。
これにマッチさせるには $NEST(<a\s[^<>]+>,</a>) と書く必要があります。