はじめまして、金子と申します。 複雑な正規表現はわりと好きです。 On Thu, 27 Oct 2005 14:36:50 +0900 中村 英夫 <cxn03651 / msj.biglobe.ne.jp> wrote: > 全角スペースを区切り(ただし、括弧で囲まれたものは区切りと > しない)として文字列の分解を行いたいのですが、次のように行う > と"@"を含んだ文字列が切り出されてしまいます。 > VineLinux3.2にWinXP上のTeraTermProからログインして > $ruby -v > ruby 1.8.2 (2004-11-03) [i386-linux] > $ruby -Ke -e "p 'あい(う え)お かき'.scan(/[^ (\(]*(?:[(\(][^)\)]*[)\)])*[^ (\(]*(?:[(\(][^)\)]*[)\)])*/)" ["あい(う え)お", "", ",・\255", ""] Vine Linux 3.2 上で直接上記コマンドを叩いても、似たような結果になりますね。 化けかたが多少違いますが。 なぜ化けちゃうのかはさておき、文字列を区切るという原点に帰って、 split を使って $ ruby -Ke -e 'p "あい(う え)お かき".split(/(?![\((][^)\)]*) +(?![^(\(]*[)\)])/)' ["あい(う え)お", "かき"] でどうでしょうか。 # bashに解釈されないように double quotation と single quotation を # 中村さんの例とは逆にしてます。 -- 金子誠司 (KANEKO Seiji) GnuPG Fingerprint = 0E77 26A2 BBEE 0D35 098D 2E0C 2FE2 A4DC D383 313C