Rubyリファレンス: Home

split (String)

Edit   History

標準クラス・モジュール > String > split

str.split(pattern = $;, [limit])

splitメソッドは、引数patternを区切り文字として文字列を分割し、配列を返します。引数の指定のしかたによってさまざまな分割ができます。分割できなかったときは、要素が文字列1つだけの配列を返します。

文字列

引数patternに文字列を指定した場合は、その文字列を区切り文字とします。

s = "hello,world,ruby"
p s.split(",")
["hello", "world", "ruby"]

正規表現

引数patternに正規表現を指定した場合は、そのパターンにマッチした部分で文字列を分割します。

s = "hello, world  , ruby"
p s.split(/\s*,\s*/)
["hello", "world", "ruby"]

パターンの中に( )がある場合は、( )に当てはまった文字列を間にはさんだ配列を返します。

s = "hello, world  ; ruby"
p s.split(/\s*(,|;)\s*/)
["hello", ",", "world", ";", "ruby"]

空白で分割

引数patternに半角空白1文字またはnilを指定すると、空白文字で文字列を分割します。引数patternのデフォルト値は組み込み変数$;で、$;の初期値はnilなので、splitメソッドの引数を省略すると空白文字による分割になります。

空白文字による分割では、文字列の先頭と末尾の空白文字は取り除かれます。

s = "hello world ruby"
p s.split
s = "  hello  world\truby\r\n"
p s.split(" ")
["hello", "world", "ruby"]
["hello", "world", "ruby"]

空白文字として扱われるのは、半角空白(0x20)とタブ、復帰、改行など(0x09 - 0x0dの範囲の制御文字)です。#ユニコードの空白文字も参照してください。

1文字ずつ分割

引数patternに空文字列""を指定すると、1文字ごとに分割した配列を返します。Ruby 1.8では$KCODE-Kオプションが設定してあれば、Ruby 1.9では文字列の文字コードが適切に設定されていれば、漢字やひらがななども取り出せます。

# encoding: utf-8  # Ruby 1.9の場合
$KCODE = 'u'       # Ruby 1.8の場合
 
s = "hello"
p s.split("")
s = "こんにちは"
p s.split("")
["h", "e", "l", "l", "o"]
["こ", "ん", "に", "ち", "は"]

引数patternに指定した正規表現のパターンが空文字列とマッチする場合も、1文字ごとに分割した配列を返します。

s = "he  llo"
p s.split(/\s*/)
["h", "e", "l", "l", "o"]

引数limit

引数limitに1以上の整数を指定すると、splitメソッドが返す配列の要素数を変えられます。limitの数が分割される数より小さければ、文字列の後ろのほうを分割せずに残します。

s = "hello,world,ruby"
p s.split(",", 2)
["hello", "world,ruby"]

limitを指定しないとき、または0を指定したときは、配列の末尾に並ぶ空文字列の要素は省略されます。limitの数が分割される数と同じとき、大きいとき、あるいは負の値のときは、末尾の空文字列は省略されずに配列に加わります。

s = "hello,world,ruby,,,"
p s.split(",")
p s.split(",", -1)
["hello", "world", "ruby"]
["hello", "world", "ruby", "", "", ""]

ユニコードの空白文字

Ruby 1.9 Ruby 1.9.1では、空白で分割するときに空白文字として扱われるのは、正規表現の[:space:]の文字と同じです。全角空白などユニコードの空白文字で分割することもできます。

Ruby 1.9.2では、1.9.1の仕様は変更され、1.8と同じくアスキー文字の空白文字だけが空白文字として扱われます。

関連項目