は、2番目の引数にpatternのすべての出現箇所を置換したstrのコピーを返します。 パターンは通常正規表現です;文字列として与えられた場合、それに含まれる正規表現のメタ文字は文字通り解釈されます。\d
は数字の代わりにバックスラッシュの後に’d’が続くと一致します。
replacement
が文字列の場合、一致したテキストに置き換えられます。 これには、\d
形式のパターンのキャプチャグループへのバック参照を含めることができます。dはグループ番号、または\k<n>
形式のパターンのキャプチャグループへのバック参照を含めることができます。nはグループ名です。 同様に, \&
, \'
, \`
, そして+
は特別な変数に対応します, $&
, $'
, $`
, それぞれ$+
と$+
である。 (Regexpを参照してください。詳細はrdocを参照のこと。)は
\&
と同じです。 \
はエスケープ、つまり単一の円記号として解釈されます。 replacement
内では、$&
などの特別な一致変数は、現在の一致を参照しないことに注意してください。
二番目の引数がハッシュで、一致したテキストがそのキーのいずれかである場合、対応する値は置換文字列です。
ブロック形式では、現在の一致文字列がパラメータとして渡され、次のような変数が渡されます,
,
$`
, $&
, そして、$'
が適切に設定されます。 (Regexpを参照してください。詳細はrdocを参照のこと。)ブロックによって返された値は、各呼び出しで一致する値に置き換えられます。
ブロックも第二引数も指定されていない場合、列挙子が返されます。
"hello".gsub(//, '*') #=> "h*ll*""hello".gsub(/()/, '<>') #=> "h<e>ll<o>""hello".gsub(/./) {|s| s.ord.to_s + ' '} #=> "104 101 108 108 111 ""hello".gsub(/(?<foo>)/, '{\k<foo>}') #=> "h{e}ll{o}"'hello'.gsub(//, 'e' => 3, 'o' => '*') #=> "h3ll*"
文字列リテラルはバックスラッシュを消費することに注意してください。 (構文/リテラルを参照してください。文字列リテラルの詳細については、rdocを参照してください。)バック参照の前には通常、バックスラッシュが追加されます。 たとえば、二重引用符で囲まれた文字列リテラルを使用してreplacement
にバックリファレンス\&
を書きたい場合は、"..\&.."
と書く必要があります。 非バック参照文字列\&
をreplacement
に記述する場合は、最初にバックスラッシュをエスケープして、このメソッドがバック参照として解釈しないようにする必要があり、次にバックスラッシュを再度エスケープして、文字列リテラルが"..\\&.."
を消費しないようにする必要があります。 多くのバックスラッシュを避けるために、ブロックフォームを使用することができます。