Rubyリファレンス: Home

[] (String)

Edit   History

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

[]は、文字列の中から部分文字列を取り出すメソッドです。s[2]s[3,5]s[2..7]s[/[0-9]/] のように、いろいろな形で利用できます。配列要素の取り出しのように記述しますが、実際にはメソッド呼び出しです。[]の中はメソッドの引数です。

sliceメソッドは、[]の別名です。

位置

str[idx]

Ruby 1.8では、引数に整数を1つ指定すると、その位置の文字を整数のコードで返します(0が1番目、1が2番目、...)。範囲外の位置を指定すると、nilが返ります。

s = "hello"
puts s[1]    # 2文字目
101

負の位置を指定すると、文字列の末尾から逆順に数えます(-1が末尾から1番目、-2が末尾から2番目、...)。

s = "hello"
puts s[-2]   # 末尾から2文字目
108

文字列はバイト列として扱われるので、漢字など2バイト以上の文字がある場合は、コードの1部が返ります。

s = "こんにちは"
puts s[1]    # UTF-8の場合、"こ"の2バイト目
129

Ruby 1.9 Ruby 1.9では、引数に整数を1つ指定すると、その位置の文字を返します。バイトごとではなく文字ごとの位置です。バイトのコードを得たい場合はgetbyteメソッドを使います。

# encoding: utf-8
s = "hello"
puts s[1]    # 2文字目
puts s[-2]   # 末尾から2文字目
s = "こんにちは"
puts s[1]    # 2文字目
e
l
ん

位置と数

str[idx, len]

引数に整数を2つ指定すると、idxの位置からlen文字の文字列を返します(位置は0が1番目、1が2番目、...です)。範囲外の位置を指定すると、nilが返ります。

s = "hello"
puts s[1, 3]   # 2文字目から3文字分
puts s[3, 10]  # はみ出しても大丈夫
ell
lo

idxに負の位置を指定すると、文字列の末尾から逆順に数えます(-1が末尾から1番目、-2が末尾から2番目、...)。idxが負の場合でも、lenは先頭から末尾への向かっての数です。

s = "hello"
puts s[-3, 3]   # 末尾から3文字目から3文字分
llo

Ruby 1.8では、文字列はバイト列として扱われます。2バイト以上の文字の一部にまたがる範囲を指定すると、文字が分断されてしまいます。

s = "こんにちは"
puts s[6, 6]   # UTF-8の場合、ひらがなは3バイトなので3文字目から2文字
にち

Ruby 1.9 Ruby 1.9では、位置と数はバイトごとではなく文字ごとになります。

# encoding: utf-8
s = "こんにちは"
puts s[2, 2]    # 3文字目から2文字
にち

範囲

str[range]

引数に範囲を指定すると、その範囲に対応する部分文字列を返します。範囲外の位置を指定すると、nilが返ります。

s = "hello, world"
puts s[7..10]   # 7文字目から10文字目まで
puts s[7...10]  # 7文字目から10文字目まで、10文字目は含まない
worl
wor

開始位置と終了位置がマイナスの場合は、文字列の末尾から数えます(-1が末尾から1番目、-2が末尾から2番目、...)。

s = "hello, world"
puts s[-5..-1]  # 末尾から5文字目..末尾から1文字目まで 
world

str[idx, len] の場合と同様に、Ruby 1.8では範囲はバイトごとに数えられます。Ruby 1.9では範囲は文字ごとに数えられます。

正規表現

str[regexp]

引数に正規表現(Regexpオブジェクト)を指定すると、そのパターンに最初にマッチした部分文字列を返します。マッチしなかった場合はnilを返します。

s = "hello, world"
puts s[/\w+/]
hello
str[regexp, num]

第2引数に整数numを指定すると、0のときはマッチした部分、1のときはパターン中の最初の( )の部分、2のときは2つ目の( )の部分、...を返します。これは、MatchDataオブジェクトの []メソッドにnumを渡したときの結果です。

s = "hello, world"
puts s[/(\w+)\W+(\w+)/, 0]    # マッチした部分
puts s[/(\w+)\W+(\w+)/, 2]    # 2つ目の( )
hellow, world
world

文字列

str[other_str]

引数に文字列を指定すると、文字列strの中に部分文字列other_strが含まれるかどうかを調べられます。含まれる場合は、その部分文字列を返します。ない場合はnilを返します。

s = "hello, world"
puts s["world"]
world

関連項目