[Tokyo.pm] look-behind in mg pattern, and relative backreference

maeda @ tokyo.pm.org maeda @ tokyo.pm.org
2002年 3月 4日 (月) 19:53:12 CST


前田です。

歌代さん> (は|が|に|を)\1

/はは|がが|にに|をを/ とするのが一番わかりやすいのは確かでしょうが、
まあそれは置いといて。

歌代さん> たとえば、\-1 で1つ前の括弧が参照できればいいんでしょうけど。

どうしてもこれをやりたければ、(?{ code })を使うしかないかなあ。

こんなの↓やってみたんですが、Perl5.6.1と5.7.2ではperlがコアダン
プしてしまいました。

while (<>) {
    use re 'eval';
    local $x = qr(x);
    print $&, "\n" if /([a-d])(?{ $x=qr($^N) })(??{ $x })/x;
}

こうやったら↓できたんですけど、解としては面白くない!
while (<>) {
    use re 'eval';
    local %x = (a => qr(a),
		b => qr(b),
		c => qr(c),
		d => qr(d));
    print $&, "\n" if /(a|b|c|d)
		       (??{ $x{$^N} })/x;
}

# 5.6.1には$^Nがないので、代わりに$+を使ってみました。

-------------------------------  Avatar          Md+   d/=□=\.   Md+
 前田 薫    maeda @ tokyo.pm.org   75t 170km/h   AFC50  O \*oo*/ "  LG+ LG+
 Tokyo.pm  http://tokyo.pm.org   HeatSink 15   LRM10   .=X ̄X=.   LRM10
-------------------------------  Armor 2164      Md+  _|_    _|_  Md+



Tokyo-pm メーリングリストの案内