[Tokyo.pm] today's one-liner quiz

Inaba Hiroto inaba @ st.rim.or.jp
2000年 2月 11日 (金) 18:42:29 CST


稲葉です。

scozens @ pwj.co.jp wrote:

>Regexpについて、最近 Text::Balanced のような bracket matchingをしたかった。
>こういうことが
>かいてしまいました:

ですが、matchingはうまくいっていると思いますが、replaceが正しくないようです。
深さ3以上のnestがあるとうまくいきません。

一応以下のようにしてみました:

sub p {
  local $_=shift;
  my $n=shift||1;
  s{(?{$b=1})
     \{
     ( (?:
          (?: \{ (?{$b++}) )+
       |
          (?: \} (?{--$b}) )+
       |
          (?(?{$b}).)
       )+ )
     \}
  }{
     "OPEN($n){".p($1,$n+1)."}($n)CLOSE"
  }sexg;
  return $_;
}

# 「use strict」しても$bは警告もされないんですね。

-- 
稲葉 浩人    Inaba Hiroto <inaba @ st.rim.or.jp>



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