From: gotoken@... (GOTO Kentaro) Date: 2000-06-09T02:29:26+09:00 Subject: [ruby-list:23118] Re: making Array ごとけんです In message "[ruby-list:23116] making Array" on 00/06/09, OZAWA Sakuro writes: >"1-3,5,7-9,16-17" >のような文字列(Niftyの会議室巡回コマンドの引数ですが)を、この例であれば >[1, 2, 3, 5, 7, 8, 9, 16, 17] >というArrayにするシンプルな方法はないでしょうか? > >試行錯誤のうちに、現在は > >mes = "1-3,5,7-9,16-17" >mes = mes.gsub(/-/, '..').split(/,/).collect{|e| eval(e).to_a}.flatten 上にくらべると随分素直なモノですが以下はいかがですか: mes = "1-3,5,7-9,16-17" __ = [] mes.scan(/(?:(\d+)|(?:(\d+)-(\d+)))(?=,|$)/).each{|s,b,e| if s __.push s.to_i else __.push *b.to_i..e.to_i end } mes = __ # eval って超ラクになる場合しか使いたくないような -- gotoken # X-Moe… :-D