なひです.

> From: "Ayanosuke" <aya / big.or.jp>
> Sent: Tuesday, February 08, 2000 3:24 PM

> > > > > a.gsub(/(^|[^\\])_/, '\1 ')
> > > > 
> > > > a.gsub( /(\G|[^\\])_/, '\1 ' )
> > > 
> > >  もしあったとして、どういう時にうれしいんでしょう?
> > 
> > \Gの機能を使わずに,例えば上のほうの例で,
> > "______" などを置換してみてください.
> 
> > わかりますか? ^^;
> 
> a = "____"
> 
> "\001 \001 _"
> 
> なんてなってしまいますね。

"\1 "なんてやったんじゃありませんか? それは8進の1です.^^;

0% ruby-1.4.3 -ve 'a = %q(______); p a.gsub( /(^|[^\\])_/, %q(\1 ))'
ruby 1.4.3 (1999-12-08) [sparc-solaris2.5.1]
" _ _ _"

0% ruby-1.5.2 -ve 'a = %q(______); p a.gsub( /(^|[^\\])_/, %q(\1 ))'
ruby 1.5.2 (2000-02-02) [sparc-solaris2.5.1]
" _ _ _"

0% 

というわけで,ただの^じゃ足りません.

> a.gsub(/\\?[\\_]/) { case $& when "_" then " " else $& end }
> なら、変換できましたけど。

無理矢理正規表現と\数字だけで書いてみると...

  a.gsub( /([^\\_]*(?:\\.[^_]*)*)_/, '\1 ' )

合ってるかな?

# これが「ヨイ」プログラムかどうかは知りません.:-)

--
NaHi, nakahiro, a.k.a. NAKAMURA, Hiroshi
http://www.sarion.com  Sarion Systems Research