Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[初学者]subメソッドとgsubメソッドで文字を置換する

More than 1 year has passed since last update.

目的

  • 人のコードを読んでいるときに「gsub」が分からなかったので調べた内容メモ

条件

  • ruby 2.4.1

目次

  • subメソッドとは
  • gsubメソッドとは
  • gsubメソッドのスニペット

subメソッドとは

subメソッドは指定したパターンにマッチした最初の部分を特定の文字列に置換します。パターンには文字列や正規表現が使えます。

irbでやってみた
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.sub(/shi/, 'ya')
# 第1引数に最初にマッチした置換されるパターン文字(正規表現)を指定
# 第2引数に置換したい新しい文字列を指定


結果
=> "yamada-shimada"
# 最初にマッチした'shi'が'ya'に置換される
ブロックをとる場合
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.sub(/shi/) {|str| 'ya'}

結果
=> "yamada-shimada"
# 最初にマッチした'shi'が'ya'に置換される

---
a.sub(/\w+/) {|str| str.upcase}

結果
=> "SHIMADA-shimada"
# 最初にマッチした'shi'のブロックを大文字にする

gsubメソッドとは

gsubメソッドはマッチしたすべての部分を特定の文字列に置換します。パターンには文字列や正規表現が使えます。

irbでやってみた
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.gsub(/shi/, 'ya')
# 第1引数にマッチした置換されるパターン文字(正規表現)を指定
# 第2引数に置換したい新しい文字列を指定


結果
=> "yamada-yamada"
# 全てマッチした'shi'が'ya'に置換される
ブロックをとる場合
# 変数aに'shimada-shimada'を代入
a = 'shimada-shimada'

# 'shimada-shimada'の最初の'shi'を'ya'に置換する
a.gsub(/shi/) {|str| 'ya'}

結果
=> "yamada-yamada"
# マッチした'shi'が'ya'に置換される

---
a.gsub(/\w+/) {|str| str.upcase}

結果
=> "SHIMADA-SHIMADA"
# マッチした'shi'のブロックを大文字にする

gsubメソッドのスニペット

  def normalize(str)
    str.strip                                    # 前後の空白除去
       .tr("0-9a-zA-Z  ()-−", "0-9a-zA-Z  ()-")  # 全角英数字を半角に
       .gsub("\t", ' ').gsub(/ +/, " ")          # 空白を単一半角スペースに統一
       .gsub("\r\n", "\n").gsub("\r", "\n")      # 改行を\nに統一
  end

まとめ

いろいろ調べてみると「gsubメソッド」は結構使いそう。あと「正規表現」

参考

第6回 正規表現と文字列の置換
subやgsubで括弧とマッチした部分の再利用、および式展開の方法

shimadama
ただのメモです。間違ったこと書いてあることは大いにあります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away