Rubyの置換処理の書き方

Rubyの置換処理の書き方

Rubyで文字列の置換処理を行う方法はいくつかありますが、主に使用されるのはString#gsub、String#sub、String#gsub!、およびString#sub!メソッドです。
それぞれのメソッドについて詳しく説明します。

1. gsubとsubメソッド

gsubとsubメソッドは、指定したパターンに一致する部分を別の文字列に置換します。
gsubは「global substitution(全置換)」の略で、文字列全体で一致するすべての部分を置換します。
一方、subは最初に一致した部分のみを置換します。

使用例

str = "Hello, world! Hello, Ruby!"

# gsubを使って"Hello"を"Hi"に置換
new_str = str.gsub("Hello", "Hi")
puts new_str
# 出力: "Hi, world! Hi, Ruby!"

# subを使って最初の"Hello"だけを"Hi"に置換
new_str2 = str.sub("Hello", "Hi")
puts new_str2
# 出力: "Hi, world! Hello, Ruby!"

上記の例では、gsubメソッドは文字列全体で"Hello"を"Hi"に置換しますが、subメソッドは最初の"Hello"だけを"Hi"に置換します。

2. gsub!とsub!メソッド

gsub!とsub!メソッドは、それぞれgsubとsubの破壊的バージョンです。
これらのメソッドは、元の文字列を直接変更します。
破壊的メソッドを使うと、元のオブジェクトが変更されるため、注意が必要です。

使用例

str = "Hello, world! Hello, Ruby!"

# gsub!を使って"Hello"を"Hi"に置換
str.gsub!("Hello", "Hi")
puts str
# 出力: "Hi, world! Hi, Ruby!"

# 元の文字列が変更されていることに注意

この例では、gsub!メソッドが呼び出されると、strオブジェクト自体が変更されます。
したがって、変更後のstrには"Hi, world! Hi, Ruby!"という文字列が格納されます。

3. 正規表現を使った置換

gsubやsubメソッドは、単純な文字列だけでなく、正規表現を使ってより柔軟な置換を行うこともできます。
例えば、すべての数字を*に置換する場合は次のようにします。

使用例

str = "My phone number is 123-456-7890."

# 正規表現を使ってすべての数字を"*"に置換
new_str = str.gsub(/\d/, "*")
puts new_str
# 出力: "My phone number is ***-***-****."

この例では、正規表現の\dは数字に一致するため、文字列内のすべての数字が*に置換されます。

4. ブロックを使った置換

gsubやsubメソッドは、ブロックを受け取ることもできます。
ブロックを使うと、置換する値を動的に生成できます。

使用例

str = "Hello, world! Hello, Ruby!"

# ブロックを使って"Hello"をその長さで置換
new_str = str.gsub("Hello") { |match| match.length.to_s }
puts new_str
# 出力: "5, world! 5, Ruby!"

この例では、gsubメソッドにブロックを渡し、"Hello"をその長さ(5)に置換しています。

5. 複数のパターンを一度に置換する

gsubメソッドを使って、複数のパターンを一度に置換することもできます。
この場合、ハッシュを使って置換のルールを指定します。

使用例

str = "Hello, world! Hello, Ruby!"

# ハッシュを使って複数のパターンを一度に置換
new_str = str.gsub(/Hello|world/, "Hello" => "Hi", "world" => "earth")
puts new_str
# 出力: "Hi, earth! Hi, Ruby!"

この例では、gsubメソッドにハッシュを渡して、"Hello"を"Hi"に、"world"を"earth"に置換しています。

6. プレースホルダーを使った置換

Rubyでは、プレースホルダー(変数埋め込み)を使った置換も可能です。
String#%メソッドを使って、変数の値を文字列に挿入できます。

使用例

name = "Ruby"
greeting = "Hello, %s!" % name
puts greeting
# 出力: "Hello, Ruby!"

この例では、%記号を使ってname変数の値を文字列に挿入しています。

まとめ

Rubyでの文字列の置換処理には、さまざまな方法があります。
gsubとsub、およびそれぞれの破壊的バージョンgsub!とsub!を使うことで、文字列全体または最初に一致した部分を置換できます。
また、正規表現やブロックを使って柔軟な置換を行ったり、複数のパターンを一度に置換することも可能です。
これらのメソッドを使いこなすことで、より効率的で強力な文字列操作ができるようになります。