06/05/10 11:47:20
[Patterns]
Name = "$NEST(<a\s[^>]+>,</a>)"
Active = FALSE
Limit = 256
Match = "$NEST((<a\s[^>]+>)\0,</a>)"
Replace = "\r\n\\0 = \0\r\n"
『<a href=1><test><a href=2><test><a href=3></a>』でテスト。
\0に<a href=1><a href=2><a href=3>が入るかと思いきや...。
たぶん<a href=1><a href=2><a href=3>が<a\s[^>]+>にマッチするかどうかのチェックを一番最後にしてる。
<a\s*>だとこのチェックもすり抜けてしまうんだろう。
それにしても<a\s*>の挙動は面白いね。 これを利用すれば今まで出来なかったマッチングが
出来るようになる可能性があると思う。
* マルチONのフィルタAで閉じタグの数を減らしたり増やしたりする
* フィルタBの$NEST()の中の<a\s*>が誤爆する範囲が変わる
これのキモは閉じタグをn個入れると<a\s*>の位置がマッチn個分戻るということ。
10個<a\s*>があって閉じタグを3個入れると7個目の<a\s*>までマッチ。 この場合は(<a\s*>*)+{7}と書けば
済むことだが、最初に『10個』という数が分からない場面では{7}という指定は出来ない。