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/