Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. 文字列.sub / gsub

文字列.sub / gsub

文字列内の特定のパターンを別の文字列に置換するメソッドです。『sub』は最初の一致のみ、『gsub』はすべての一致を置換します。

構文
# 最初に一致した箇所を置換します(新しい文字列を返します)。
文字列.sub(パターン, 置換文字列)
文字列.sub(パターン) { |match| ... }

# すべての一致箇所を置換します(新しい文字列を返します)。
文字列.gsub(パターン, 置換文字列)
文字列.gsub(パターン) { |match| ... }

# 元の文字列を直接書き換えます(破壊的メソッド)。
文字列.sub!(パターン, 置換文字列)
文字列.gsub!(パターン, 置換文字列)
メソッド一覧
メソッド概要
sub(pattern, str)最初に一致した箇所を置換した新しい文字列を返します。元の文字列は変更されません。
gsub(pattern, str)すべての一致箇所を置換した新しい文字列を返します。元の文字列は変更されません。
sub!(pattern, str)元の文字列を直接変更します。置換が行われた場合は変更後の文字列を、行われなかった場合は『nil』を返します。
gsub!(pattern, str)元の文字列を直接変更します。すべての一致箇所を置換します。
サンプルコード
文章 = "猫が猫を追いかけています。"

# sub は最初の一致だけを置換します。
puts 文章.sub("猫", "犬")   # 犬が猫を追いかけています。

# gsub はすべての一致を置換します。
puts 文章.gsub("猫", "犬")  # 犬が犬を追いかけています。

# 元の文字列は変わっていません。
puts 文章  # 猫が猫を追いかけています。

# 正規表現を使った置換です。
メール = "user@example.com"
puts メール.gsub(/@.+/, "@***.***")  # user@***.***

# ブロックを使って動的に置換できます。
数字文 = "価格は100円で、数量は3個です。"
puts 数字文.gsub(/\d+/) { |n| n.to_i * 2 }  # 価格は200円で、数量は6個です。

# 破壊的メソッドで元の文字列を変更します。
テキスト = "Hello World"
テキスト.gsub!(" ", "_")
puts テキスト  # Hello_World
概要

『sub』と『gsub』は文字列置換の基本メソッドです。第1引数には文字列だけでなく正規表現を渡すこともでき、柔軟なパターンマッチに対応しています。ブロックを渡すと、マッチした文字列を引数として受け取り、動的に置換文字列を生成できます。

末尾に「!」がつく破壊的メソッド(『sub!』『gsub!』)は元の文字列そのものを変更します。置換が行われなかった場合は『nil』を返すため、戻り値をそのまま使うコードでは注意が必要です。

文字列の検索には『include?』や『index』を、文字列の大文字小文字変換には『upcase / downcase』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。