From: 中村 英夫 <cxn03651 / msj.biglobe.ne.jp>
Subject: [ruby-list:41400] 全角スペースを区切りとした文字列分解で
Date: Thu, 27 Oct 2005 14:36:50 +0900

るびきち@複雑な正規表現は苦手…です。

>  全角スペースを区切り(ただし、括弧で囲まれたものは区切りと
> しない)として文字列の分解を行いたいのですが、次のように行う

僕のやり方は、一度カッコ内の全角スペースを別の文字に置換してからsplitをし、
最後に元に戻します。

$ cat <<'%%%' > euc.rb
def zsplit(s)
  p_open = "[(\(]"    # 開きカッコ
  p_close = "[)\)]"   # 閉じカッコ
  zspace = " "        # 全角スペース
  escape = "\001\002"  # カッコ間の全角スペースを別の文字に退避
  s = s.dup
  s.gsub!(/#{p_open}.*?#{p_close}/) { $&.gsub(/#{zspace}/, escape) }
  s.split(zspace).map {|chunk|
    chunk.gsub(/#{escape}/, zspace)
  }
end

p zsplit("あい(う え)お かき")
%%%



$ ruby -v
ruby 1.8.3 (2005-09-09) [i686-linux]
$ wine ruby -v
ruby 1.8.2 (2004-12-25) [i386-mswin32]
$ nkf -s euc.rb > sjis.rb
$ ruby -Ke euc.rb
["あい(う え)お", "かき"]
$ wine ruby -Ks sjis.rb | nkf -e
["あい(う え)お", "かき"]



るびきち☆
http://www.rubyist.net/~rubikitch/