LoginSignup
0
0

More than 5 years have passed since last update.

gsubで文字列変換

Last updated at Posted at 2019-02-25

gsub

gsubは、パターンにマッチした文字列を置き換えたい時に使います。
また、パターンには、正規表現が使えます。

使い方

文字列.gsub(パターン, 置き換え後の文字)
phone = '090-1234-5678'
phone.gsub(/-/, '')

結果

=>  "09012345678"

* 2019/2/27追記

コメント欄にて、@scivolaさんにアドバイス頂いたので追記です!
単純な削除はString#deleteの方が良いとのこと。

phone = '090-1234-5678'
phone.delete('-')

=> "09012345678"

benchmark_driverというgemでベンチマークするとgsubよりdeleteの方が速いらしいです。
ベンチマーク載せた方が良い記事書けそうですね。勉強になりました。

gsub!

gsubと同じですが、破壊的メソッドです。

phone = '090-1234-5678'
phone.gsub!(/-/, '')

実行した時の返り値もgsubと同じ

=>  "09012345678"

破壊的メソッドなので、レシーバであるphoneの中身も返り値と同じになります。

print phone

結果

=>  "09012345678"

ブロックを使ったgsub

gsub、gsub!は、パターンにマッチした文字列をブロックに渡して加工出来ます。
ブロックを使うとどんな文字列にも加工できそうです。

文字列.gsub(パターン) { |ブロック| 処理 }

試しにスネークケースで書かれたhello_worldの先頭のhと_の後ろのwを大文字にしてキャメルケースのHelloWorldにしてみましょう。

snake = 'hello_world'
snake.gsub!(/^.|(?<=_)./) { |camel| camel.upcase } # 先頭と_の後ろを大文字にします
snake.gsub!(/_/, '') # _を削除します

結果

=> "HelloWorld"

例題だとgsubじゃなくてscanとかでも出来そうですが、scanはまたの機会にまとめます。

参考
https://www.sejuku.net/blog/14685#gsub-3
https://www.sejuku.net/blog/60033

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0