Rubyリファレンス: Home

[]= (String)

Edit   History

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

[]=メソッドは、str[idx] = new_strのように記述することで、[]内で指定した部分文字列を右辺の文字列で置き換えます。strがレシーバで、[]内のindexと右辺のnew_strが引数です。レシーバ自身を変更するメソッドです。戻り値は常に右辺のnew_strです。

[]メソッドと同じく、[]内には位置だけでなく、位置と数、範囲、正規表現、文字列を指定できます。詳しくは[]メソッドをご覧ください。

部分文字列が見つからない場合は例外IndexErrorが発生します。

Ruby 1.9 位置、数、範囲はRuby 1.8ではバイト単位、Ruby 1.9では文字単位になります。

位置

str[idx] = new_str

[]内に整数idxを1つ指定して、右辺に文字列new_strを置くと、idxの位置の文字をnew_strで置き換えます。

s = "hello"
s[4] = "oooo"    # 5文字目を置換
puts s
helloooo
str[idx] = integer

Ruby 1.8では、右辺に整数integerを置くと、idxの位置のバイトをintegerで置き換えます。

s = "hello"
s[1] = 0x61     # 2文字目をaに置換
puts s
hallo

Ruby 1.9 Ruby 1.9では、[]=の右辺に整数は指定できなくなりました。位置を指定してバイトを変更したいときはsetbyteメソッドを使います。

位置と数

str[idx, len] = new_str

[]内に整数を2つ指定すると、idxの位置からlen文字分の部分文字列を右辺のnew_strで置き換えます。

s = "hello"
s[1, 3] = "ipp"   # 2文字目から3文字分を置換
puts s
hippo

範囲

str[range] = new_str

[]内に範囲を指定すると、その範囲に対応する部分文字列を右辺のnew_strで置き換えます。

s = "hello, world"
s[7..11] = "sekai"  # 8文字目から12文字目まで置換
puts s
hello, sekai

正規表現

str[regexp] = new_str

[]内に正規表現を指定すると、そのパターンに最初にマッチした部分文字列を右辺のnew_strで置き換えます。

s = "hello, world"
s[/\w+/] = "morning"  # 最初の単語を置換
puts s
morning, world
str[regexp, num] = new_str

[]内に正規表現と整数を指定すると、0のときはマッチした部分、1のときはパターン中の最初の( )の部分、2のときは2つ目の( )の部分、...を右辺のnew_strで置き換えます。

s = "hello, world"
s[/(\w+)\W+(\w+)/, 2] = "sekai"  # 2つ目の()を置換
puts s
hello, sekai

文字列

str[other_str] = new_str

[]内に文字列を指定すると、部分文字列other_strを右辺のnew_strで置き換えます。同じ部分文字列が複数あるときは、最初のものだけ置き換わります。

s = "hello, hello, world"
s["hello"] = "hi"   # 最初の"hello"を置換
puts s
hi, hello, world

関連項目