[ruby-list:49612] Re: ダブルバックスラッシュとバックスラッシュの入り混じる文字列のsplit
From:
古川大輔 <mogya99@...>
Date:
2013-09-28 11:27:00 UTC
List:
ruby-list #49612
頭の体操みたいで楽しいですね。
案1 素直に文法どおりに書く
文字列中に\を書きたいときは\\と書くのがルールですので、元の文字列もこのルールに従ってエスケープすれば、
irb(main):009:0> 'first\\\\ sec\\ond\\\\ third\\\\ fourth\\\\'.split('\\\\')
=> ["first", " sec\\ond", " third", " fourth"]
という具合で一応望む結果を得ることができます。
とはいえ、これでは元の文字列をそのまま書いているという気分は薄いかも知れないですね。
案2 ヒアドキュメントを使う
>シングルクォー トで囲ったヒアドキュメントの場合、' をエスケープする必要がないというこ
>とは、\の特別扱いも必要ないということになる。つまり、シングルクォート
>で囲ったヒアドキュメントは完全に書いたままの文字列になる。http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fliteral.html#string
ということで、これを使えば\も\\も文字通りに解釈してもらえます。
irb(main):016:> str=<<'EOS'
irb(main):017:0' first\\ sec\ond\\ third\\ fourth\\
irb(main):018:0' EOS
irb(main):019:0> str.chop.split('\\\\')
=> ["first", " sec\\ond", " third", " fourth"]
最後にchopで改行を落とさないといけないのがすこし悔しいですが、
一応メタ文字はそのまま書けるのでこんなもんでいかがでしょうか?
/Daisuke
----- Original Message -----
>From: 村岡 恒輝 <magi.select@gmail.com>
>To: ruby-list@ruby-lang.org
>Date: 2013/9/28, Sat 19:41
>Subject: [ruby-list:49610] ダブルバックスラッシュとバックスラッシュの入り混じる文字列のsplit
>
>
>初めまして、村岡と申します。
>'first\\ sec\ond\\ third\\'
>という文字列をバックスラッシュは無視し、ダブルバックスラッシュでsplitすることで
>["first", " sec\ond", " third"]
>を得たいのですが、
>>> 'first\\ sec\ond\\ third\\ fourth\\' #=> "first\\ sec\\ond\\ third\\ fourth\\"
>>> "first\\ sec\ond\\ third\\ fourth\\" #=> "first\\ second\\ third\\ fourth\\"
>と、rubyに文字列を読み込ませた瞬間、メタ文字が解釈されてダブルバックスラッシュとバックスラッシュの見分けがつかなくなり、splitできなくなってしまうように思われるのですが、良い方法はあるのでしょうか。
>アドバイス頂ければ幸いです。
>--
>村岡
>magi.select@gmail.com
>
>