こんにちは! エンジニアのヤマギシです。
今回はRubyのgsubについて、わかりやすく解説していこうと思います。
こちらの記事では、
- gsubの概要や書き方
- gsubやgsub!などの使い方
をパターン別で解説し
- gsubやgsub!の注意点
を説明していこうと思います。
gsubとは
gsubとは、正規表現のパターンにマッチした文字列をすべて置き換える命令文です。まず、用語について抑えておきましょう。正規表現は、いろいろな文字列を曖昧な方法で指定することができる表現方法です。
まだ分かりづらいので、少し例を示しますね。
- Ruby
- RUBY
- ruby
このように同じ意味のさまざまな文字列であっても曖昧な感じで一括指定できるという理解で大丈夫です。つまり、正規表現で指定するパターンにマッチした文字列を、指定した文字列に置き換えます。
では、正規表現の意味を抑えた上で、さっそくgsubについて説明していきましょう! 先ほど、ご説明したとおりgsubというのは、対象の文字列をマッチしたすべての箇所に対して置き換えたい場合に使用します。
基本的な構文は以下のとおりです。
置換対象の文字列.gsub(/検索対象の文字列/,置き換え後の文字列)
こちらの構文を使うと、検索対象文字列の正規表現にマッチした文字列を置換後の文字列を置換後の文字列に置き換えることが出来ます。上記の書き方をそのまま覚えて、使い方を理解してくれたらオッケーです。
gsub・gsub!の使い方
では、基本的な書き方がわかったところで、実際のサンプルコードをパターン別に見ていきましょう!
まず、携帯電話番号をハイフンありで記載していた文字列に対し、ハイフンなしで表示させたいときのサンプルを見ていきましょう!
phone_num = "090-1234-5678" # 置き換え前 p phone_num.gsub(/-/,"") # 置き換え後
[出力結果]
09012345678
変数phone_numにハイフンありの携帯電話番号(“090-1234-5678”)を格納します。
続いて、携帯電話番号(“090-1234-5678”)が格納されている変数phone_numに対し、gsubメソッドで置き換え後の文字列(ハイフンなし)へとすべて変換して出力しています。ただ、一時的に変換しただけなので、
p phone_num
とすると
090-1234-5678
と変数phone_numに格納された『090-1234-5678』が出力されてしまいます。では、変数へ格納されたオブジェクトをまるまる変えるにはどのようにすればいいのでしょうか。
その場合、gsub!メソッドを使います。gsub!は破壊的メソッドと呼ばれており、変数に格納された文字列などのオブジェクトを変更するメソッドです。では、サンプルコードで確認してみましょう!
phone_num = "090-1234-5678" # 置き換え前 phone_num.gsub!(/-/,"") # 置き換え後 p phone_num #変数を出力
[出力結果]
09012345678
最後にpメソッドで変数phone_numのみ指定して出力しているのにもともと格納していたハイフンが外れて出力されているのが、わかるかと思います。
ただ、すべて置き換えたいのではなく、最初の文字だけを置き換えたい場合もあるかと思います。その場合、subメソッドを使用します。
phone_num = "090-1234-5678" # 置き換え前 p phone_num.sub(/-/,"") # 置き換え後
[出力結果]
0901234-5678
subメソッドの方では、最初のハイフンのみ置き換えられているのがわかるかと思います。
ご紹介した
- gsub
- gsub!
- sub
を場合によって使い分けるときがあるかと思いますので、しっかりと理解しておきましょう!
gsub・gsub!の注意点
では基本的なgsub・gsub!の使い方がわかった上で注意点について説明していきます。gsubメソッドは文字列を一時的に変換するのに対して、gsub!メソッドは破壊的メソッドで文字列を書き換えます。
『!』があるかないかだけですが、gsubメソッドは文字列文字列を書き換えているわけではないので、その点を理解しておきましょう!
文字列のさまざまな置換方法
さて、これまでgsub、gsub!、subといった文字列を置き換える方法について解説してきました。ただ、今回ご紹介した内容はあくまでも基本的な置き換え方法に特化した内容です。
冒頭でご説明した正規表現の知識を生かした置き換え方法もまだまだ多数あります。今回の記事では説明を省かせていただきますが、こちらの記事で正規表現を使った置き換え方法を解説しておりますので、是非ご参照ください。
具体的には正規表現をベースとした
- ハッシュを使った複数の文字の置き換え
- ブロックを使ったgsub!
- グループ化</b
に加え、今回説明してきたgsub、gsub!、subについてご説明しております。
まとめ
いかがでしたでしょうか。今回はRubyの文字列の置き換え方法について基本的な使い方を学んできました。
今回の記事ではgsubに特化してご説明してきましたが、他にもざまざまな置き換えメソッドがございます。文字列の置き換え方法について躓いた際は、こちらの記事に戻ってきてくれたら嬉しいです。