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

るびきちです。

>   ・区切り文字は[ \t\r\n\f ]  # 最後は全角スペースです
>     ->ですので、るびきちさん方式はそのままでは流用できそ
>      うにありません。
>   ・全角及び半角の()<>[]「」{}【】内の上記区切り文
>    字は区切りとしない
>   ・()等のパターンは0以上の任意回出現する

別解として1文字ずつ見ていく方法も考えていました。
参考になれば幸いです。

def zsplit(s)
  p_open = "[(\(]"    # 開きカッコ
  p_close = "[)\)]"   # 閉じカッコ
  delimiter = "[ ]"   # 全角スペース

  ret = []
  chunk = ""
  paren_level = 0
  s.split(//).each {|ch|   # 1文字ずつ見ていく
    case ch
    when /#{p_open}/
      chunk << ch
      paren_level += 1
    when /#{p_close}/
      chunk << ch
      paren_level -= 1
    when /#{delimiter}/
      if paren_level > 0
        chunk << ch
      else
        ret << chunk
        chunk =  ""
      end
    else
      chunk << ch
    end
  }
  ret << chunk
end

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

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