Rubyには文字列を置換するときに便利なsubメソッドがあります。
Rubyで文字列を置換するときに、
「そもそも文字列を置換する方法がわからない」
「正規表現の指定方法がわからない」
「メソッドがたくさんあってどれを使っていいかわからない」
のような問題に直面することがあります。
ここでは文字列を置換するsubメソッドについて、
【基礎】subメソッドで指定した文字列を置換する
【基礎】subuメソッドで置換後処理でブロックを使用する
【基礎】sub!メソッドの使い方
【発展】Rubyの正規表現
【発展】文字列のさまざまな操作方法
などについて解説いたします。
subメソッドは文字列を置換するときによく使用するメソッドですので、使い方についてはよく理解しておきましょう!
subメソッドとは
subメソッドは、文字列の中に正規表現でマッチした文字列が存在した場合に、指定した文字列で置換を行います。
返り値には置換後の文字列が返されます。
subメソッドは以下のように記述します。
書き方
文字列オブジェクト.sub(/正規表現/, 置換文字列) 文字列オブジェクト.sub(/正規表現/) {|match| ブロック}
なお、文字列の置換は最初に一致した箇所のみ行います。
全ての一致した文字列を置換したい場合はgsubメソッドを使用します。
gsubメソッドについては、以下の記事で詳しく解説しています。
subメソッドの使い方
ここでは、subメソッドの使い方をパターン別に見ていきましょう。
指定した文字列を置換する
たとえば、以下の「apple」という文字列を「orange」に変換したい場合は以下のように記述します。
サンプルプログラム:
str = "apple banana melon" puts str.sub(/apple/, 'orange')
実行結果:
orange banana melon
このサンプルプログラムでは、subメソッドで指定した第一引数の「/apple/」が存在した場合、第二引数で指定した「orange」に変換する処理を行っています。
マッチした文字列が変換されていることがわかりますね!
また、前述したとおりsubメソッドは最初に一致した文字列のみの置換を行いますので注意しましょう。
以下のようにマッチする単語が連続していても、置換されるのは最初に一致した文字列だけとなります。
str = "apple apple apple" puts str.sub(/apple/, 'orange')
実行結果:
orange apple apple
置換後処理でブロックを使用する
subメソッドは結果をブロックに渡して処理を行うこともできます
以下のサンプルでは、subメソッドで一致した文字列に対して、大文字に変換する処理を行っています。
サンプルプログラム:
str = "apple orange melon" puts str.sub(/apple/) {|w| w.upcase }
実行結果:
APPLE orange melon
このサンプルではsubメソッドの結果を{}で囲ったブロックに渡してあげることで、簡単にブロックを扱うことができます。
sub!メソッドの使い方
sub!メソッドの「!」は、破壊的にメソッドと呼ばれ、使用することでオブジェクトの内容自体が変更されます。
sub!メソッドの使い方や引数の指定方法はsubメソッドと同じです。
それではsubとsub!メソッドの違いを見てみましょう。
サンプルプログラム:
str = "apple apple apple" str.sub(/apple/, 'orange') puts str str = "apple apple apple" str.sub!(/apple/, 'orange') puts str
実行結果:
apple apple apple orange apple apple
このようにsub!メソッドを使用すると、元となるオブジェクト自体が変更されていることがわかりますね!
Rubyの正規表現
Rubyでは文字列の検索や置換などを行うときに、正規表現を指定しますが、そもそも正規表現自体をよくわかっていない方も多いのではないでしょうか?
Rubyで使われる正規表現については、以下の記事で詳しく解説していますのでぜひ参考にしてください!
文字列のさまざまな操作方法
Rubyでは正規表現を使用して、文字列をさまざまな形で操作することができます。
文字列の扱いかた全般については、以下の記事で詳しく解説しています!
まとめ
ここでは、subメソッドで文字列を置換する方法について、
- subメソッドとは
- subメソッドの使い方
- sub!メソッドの使い方
- Rubyの正規表現
- 文字列のさまざまな操作方法
などについて解説しました。
subメソッドは文字列を置換するときによく使用しますので、使い方についてはしっかりと理解しておきましょう。
もし、subメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!