gsub!(pattern, replace) -> self | nil
[permalink][rdoc][edit]-
文字列中で pattern にマッチする部分全てを文字列 replace に破壊的に置き換えます。
置換文字列 replace 中の \& と \0 はマッチした部分文字列に、 \1 ... \9 は n 番目の括弧の内容に置き換えられます。置換文字列内では \`、\'、\+ も使えます。これらは $`、$'、$+ に対応します。
gsub! は通常 self を変更して返しますが、置換が起こらなかった場合は nil を返します。
- [PARAM] pattern:
- 置き換える文字列のパターンを表す文字列か正規表現。文字列を指定した場合は全く同じ文字列にだけマッチする
- [PARAM] replace:
- pattern で指定した文字列と置き換える文字列
- [RETURN]
- 置換した場合は self、置換しなかった場合は nil
buf = "String-String" buf.gsub!(/in./, "!!") p buf # => "Str!!-Str!!" buf = "String.String" buf.gsub!(/in./, '<<\&>>') p buf # => "Str<<ing>>-Str<<ing>>"
注意:
引数 replace の中で $1 を使うことはできません。 replace は gsub メソッドの呼び出しより先に評価されるので、まだ gsub の正規表現マッチが行われておらず、 $1 がセットされていないからです。
また、gsub では「\」が部分文字列との置き換えという特別な意味を持つため、 replace に「\」自身を入れたいときは「\」を二重にエスケープしなければなりません。
'abbbcd'.gsub!(/a(b+)/, "#{$1}") # NG 'abbbcd'.gsub!(/a(b+)/, "\1") # NG 'abbbcd'.gsub!(/a(b+)/, "\\1") # OK 'abbbcd'.gsub!(/a(b+)/, '\\1') # OK 'abbbcd'.gsub!(/a(b+)/, '\1') # OK 'abbbcd'.gsub!(/a(b+)/) { $1 } # OK これがもっとも安全
[SEE_ALSO] String#sub, String#gsub
gsub!(pattern) {|matched| .... } -> self | nil
[permalink][rdoc][edit]gsub!(pattern) -> Enumerator
-
文字列中で pattern にマッチする部分全てを順番にブロックに渡し、その評価結果に置き換えます。
また、ブロックなしの場合と違い、ブロックの中からは組み込み変数 $1, $2, $3, ... を問題なく参照できます。
- [PARAM] pattern:
- 置き換える文字列のパターンを表す文字列か正規表現。文字列を指定した場合は全く同じ文字列にだけマッチする
- [RETURN]
- 置換した場合は self、置換しなかった場合は nil
str = 'abcabc' str.gsub!(/b/) {|s| s.upcase } p str #=> "aBcaBc" str = 'abcabc' str.gsub!(/b/) { $&.upcase } p str #=> "aBcaBc"
[SEE_ALSO] String#sub
gsub!(pattern, hash) -> self | nil
[permalink][rdoc][edit]-
文字列中の pattern にマッチした部分をキーにして hash を引いた値へ破壊的に置き換えます。
- [PARAM] pattern:
- 置き換える文字列のパターン
- [PARAM] hash:
- 置き換える文字列を与えるハッシュ
hash = {'b'=>'B', 'c'=>'C'} str = "abcabc" str.gsub!(/[bc]/){hash[$&]} p str #=> "aBCaBC" str = "abcabc" str.gsub!(/[bc]/, hash) p str #=> "aBCaBC"