• WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15
  • WebCampPro_インタビュー
    未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15
  • WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01

◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

Web Camp【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でWebサービス等作りたい方
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
Tech Camp教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
WebCampPro転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアを3ヶ月で目指すプログラミングスクールです。
11月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
10月生は満員となっております。11月生募集に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

文字列の置換というのは、プログラムで文字列データを扱う上で、頻繁に行う処理の1つです。

なぜなら、文字列データには、人が手作業で入力したものも少なくなく、入力書式が統一されていないことが多いからです。また、複数の入力もとのデータを組み合わせるときには、同一の形式に合わせてから処理した方が、処理を簡略化できます。

そういった前処理を行う文字列置換の中でも、正規表現を使って様々なパターンに対応できるのが、Rubyのgsubメソッドです。

正規表現を使った文字列置換をマスターすれば、Rubyの利便性はより大きく向上します。ぜひ、お読みください。

gsubメソッドで文字列を置換する

Rubyで文字列を置換するとき、置換したい文字列が1つに決まっているのであれば、その文字列を検索して置換するかもしれません。

gsub00-1.rb

str = "I like Ruby. I like Ruby Programming. I like Ruby Study!"
find_str = "like"

idx = str.index(find_str)
unless idx.nil?
  str[idx, find_str.length] = "love"
  idx = str.index(find_str)
end
p(str)

もちろん、これですべての「like」を「love」へ置換できます。しかし、置換するために「indexメソッドで検索」、「[]=で置換」を「whileで繰り返す」という処理をしているのは、少し面倒です。
※1カ所だけならwhileでの繰り返しは不要です

また、もし置換したい文字列が複数あった場合、置換したい文字列の種類だけ同じ処理を繰り返さなければいけません。そのため、この処理をメソッドにしてしまう方が良いかもしれません。

しかし、gsubメソッドを使えば、この処理を1行で済ませることができるのです。

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
2018-01-26 13:03
今回の記事では、WebCampに1ヶ月間通い、未経験からエンジニアとして転職した星野さんにお話を伺いました。 <プロフィール> 星野 智洋 さん(25) 学生時代は日本大学芸術学部...

gsubメソッドの構文

まずは、gsubメソッドの構文を確認しておきましょう。

Stringオブジェクト.gsub(正規表現パターン, 置換文字列)
パラメータ 説明 デフォルト値
第1引数 正規表現のパターン文字列 なし
第2引数 置換する文字列 なし

第1引数には、正規表現のパターン文字列を渡します。オブジェクトの持っている文字列内で、このパターンに一致する部分が置換されることになります。

なお、第1引数には正規表現ではなく普通の文字列も指定でき、その場合は文字列に一致する部分が置換される一般的な文字列置換の処理になります。

第2引数には、第1引数で見つかった文字列が置換される文字列を渡します。そのため、第2引数を空文字列にすることで、特定のパターンに一致する部分を削除することも可能です。

正規表現

gsubメソッドのポイントは、なんといっても正規表現での検索です。

正規表現というのは、文字列のパターンを記号で表したものです。

初めて見る人は少し戸惑ってしまうかもしれませんが、慣れてしまえば恐れるものではありません。

積極的に使って慣れていきましょう。

正規表現を扱うには、パターンを表す記号を知らなければいけませんので、よく使うものを紹介しておきます。

正規表現 意味
^ 行頭 /^abc/ → abcで始まる行
$ 行末 /abc$/ → abcで終わる行
. 改行を除く任意の1文字 /a.b/ → aとbの間に任意の文字1文字が挟まっている
[...] []内のいずれか1文字 /[A-Za-z]/ → 英字
[^...] [ ]内に含まれない1文字 /[^0-9]/ → 数字以外(数字の場合は/[0-9]/)
* 0回以上の繰り返し /a.*/ → aの1回以上の繰り返し
+ 1回以上の繰り返し /a+/ → aの1回以上の繰り返し
{m} m回の繰り返し /[0-9]{3}/ → 000から999の数字
{n,} n回以上の繰り返し /S{3}/ → 3個以上繰り返されているS(SSS、SSSS、SSSSS...)
{m,n} m回以上n回以下の繰り返し /S{2,3}/ → 2個か3個繰り返されているS(SS、SSS)
? 0回または1回 /aa?/ → aまたはaa
a|b aまたはb /ABC|abc/ → ABCまたはabcの行
(...) グループ化 /(ABC)+/ → ABCの1回以上の繰り返し
\w 英数字と_ /^\w+$/ → 英数字のみの行
\W 英数字と_以外 /Hello,\WWorld/ → Hello,とWorldの間に英数字以外の文字列
\s 空白文字 /Hello,\sWorld/ → Hello,とWorldの間に空白1文字
\S 空白文字以外 /Hello\SWorld/ → HelloとWorldの間に空白以外の文字
\d 数字 /a\d/ → aと数字1文字
\D 数字以外 /a\D/ → aと数字以外の1文字
\ メタ文字を文字にする /\./ → 「改行を除く任意の1文字」ではなく「.」

詳細については、「【Ruby入門説明書】正規表現について解説」をご確認ください。

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】
2018-03-22 23:28
今回の記事では、独学でPHPを1年半学習し、その後WebCampを受講して未経験からエンジニアへと転職された佐々木さんにお話を伺いました。 <プロフィール> 佐々木 祐樹 さん(2...

置換の方法

では、gsubメソッドを使って文字列を置換する方法を説明します。

文字列を使う

もっとも基本的な置換方法が、第1引数に正規表現パターンの文字列を設定する方法です。

もちろん、上述のように、正規表現ではなく、通常の文字列を渡すことで、固定値の置換ができます。

gsub00-1.rbを、gsubメソッドを使って変更してみましょう。

gsub00-2.rb

str = "I like Ruby. I like Ruby Programming. I like Ruby Study!"
p(str.gsub("like", "love"))

(結果)

"I love Ruby. I love Ruby Programming. I love Ruby Study!"

gsub00-1.rbに比べると、とてもシンプルで分かりやすいプログラムになっていますね。gsubメソッドを使えば、プログラムの可読性が確実に上がります。

なお、「.」や「?」のように、正規表現ではパターン記号として使われている文字を検索したり、置換したりする場合は、「\.」や「\?」という風に、「\」をつける(エスケープする)ことで文字として扱います。

では次に、正規表現パターンを使ってみましょう。例えば、「I」と「.」に挟まれた部分を、太字にしてみます。

gsub00-3.rb

str = "I like Ruby. I like Ruby Programming. I like Ruby Study!"
p(str.gsub(/I(.+?)\./, '<b>I\1.</b>'))

(結果)

"<b>I like Ruby.</b> <b>I like Ruby Programming.</b> I like Ruby Study!"

このように、正規表現を使うと複雑な置換もシンプルなプログラムで処理できるのです。

ハッシュを使う

複数の文字を置換したい場合、ハッシュを使うことで一気に行うことができます。

gsub00-2.rbを改造して、具体的なプログラムで確認してみましょう。

今度は、「I」を「You」に、「R」を「r」に置換してみます。

gsub00-4.rb

str = "I like Ruby. I like Ruby Programming. I like Ruby Study!"
p(str.gsub(/[IR]/, {"I" => "You", "R" => "r"}))

(結果)

"You like ruby. You like ruby Programming. You like ruby Study!"

なお、あくまでも文字を文字か文字列へ置換するだけで、文字列=>文字列の置換は、ハッシュではできませんので、注意してください。

ブロックを使う

「ブロック」というのは、繰り返し処理のdo~endや{}に過去まれた処理で、||で囲んだ引数(ブロック引数)を持つ簡単なメソッドとも言えます。

gsubメソッドでは、第2引数を省略して、ブロックを持たせることができます。

その場合の構文は、次のようになっています。

Stringオブジェクト.gsub(正規表現パターン) do |ブロック引数|
  処理
end

ブロック引数には、正規表現パターンにマッチした文字列が格納されます。

処理の結果が、マッチした部分と置換されます。

処理の部分にはどんな処理でも記載できますので、マッチさえさせられれば、どんな加工でもできると思って良いでしょう。

では、gsub00-2.rbに手を入れて、ブロックでの置換を試してみましょう。

gsub00-5.rb

str = "I like Ruby. I like Ruby Programming. I like Ruby Study!"

str = str.gsub(/\w+/) do |s|
  if s == "like"
    "love"
  elsif s == "I"
    "We"
  elsif s == "Ruby"
    "ruby"
  else
    s
  end
end

p str

(結果)

"We love ruby. We love ruby Programming. We love ruby Study!"

ハッシュでの置換ではできない、複数文字列の一括置換も、ブロックなら簡単です。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
2017-10-04 10:26
今回の記事では、未経験からWebCampを1ヶ月受講し、その後エンジニアとして転職をした喜田さんにお話を伺いました。 <プロフィール> 喜田 大介 さん (28歳) 大学時代はプ...

破壊的メソッド「gsub!」

gsubメソッドを調べていると、「gsub!メソッド」が見つかります。

これは、gsubメソッドの破壊的メソッド版です。

「破壊的メソッド」というのは、もともとのオブジェクトのデータを変更してしまうメソッドのことです。

もとの文字列が必要なければ、gsub!メソッドの方がよけいな変数を必要としませんので、プログラムがすっきりする場合もあります。

ただし、もとの文字列を保持しておく処理では取り返しがつきませんので、その文字列の用途を把握した上で使用しましょう。

subメソッド、sub!メソッド

gsubメソッドとほぼ同じ構文で文字列置換を行うメソッドに、subメソッドとsub!メソッドがあります。

gsubメソッドとの違いは、置換をする回数だけです。gsubメソッドは、パターンにマッチした部分すべてを置換しますが、subメソッドは最初に見つけた1カ所のみ置換して、処理を終了します。

問題「埋もれたメッセージ」

次の文字列から、隠されたメッセージを見つけてください。
なお、必ずgsubメソッドを使ってください。

ヒント:削除します

msg = "sTs hs asnsks   sysosus   sf sos rs   sr ses as dsisns gs !s! s"

まとめ

gsubメソッドについて説明しました。

文字列の置換は、データを扱う前の準備としては頻度の高い処理です。そのため、gsubメソッドは使用頻度が高いメソッドと言えます。

正規表現という、少し難しそうに見えるものを使うため、あまり深く使っていない人もいます。しかし、正規表現を使ってgsubメソッドを使いこなすことは、中級Rubyプログラマーへの必須スキルです。

ぜひ、正規表現に挑戦し、gsubメソッドを使いこなしていきましょう。


・gsubメソッドは、文字列置換をシンプルに処理できる
・第1引数に文字列を渡すと、固定文字列の置換が可能
・第1引数に正規表現パターンを渡すことで、パターンにマッチした部分すべてを置換する
・第2引数にハッシュを渡すと、複数文字の一括置換ができる
・ブロックを渡すことで、マッチした文字列を任意に処理することができる
・gsub!メソッドは、gsubメソッドの破壊的メソッド版

問題の答え

msg = "sTs hs asnsks   sysosus   sf sos rs   sr ses as dsisns gs !s! s"

p(msg.gsub(/\s?s\s?/, ''))

WebCampOnline プログラミングコースについて

WebCampでは、「どこでも学べる」オンラインコースを開講しています。

初心者・未経験の方でもわずか1ヶ月でプログラミングの基礎を学び、アプリケーション開発をすることができます。

WebCampOnlineが選ばれる3つの理由

1.学習の仕方がわからなくても安心!初心者に寄り添った学習カリキュラム

これから学習を始める初心者の方や、独学で挫折してしまった方に向けて、アプリケーション作成をゴールとする一気通貫したカリキュラムを提供しています。2500名を輩出しているWebCampだからこその教室でのリアルな受講生の声を反映し、オンラインコースでも初心者に寄り添った学習体験をご提供いたします。

2.つまずいたらすぐ解決!プロのエンジニアに質問し放題

プログラミング学習で挫折する理由の多くは「つまずいた時に聞ける人がいない」ことです。オンラインコースでは、現役エンジニアやプロ講師に、すぐにチャットでの質問が可能です。つまずきをすぐに解消できるので、挫折せずに学習を継続することができます

3.1ヶ月間で終わらなくても大丈夫!カリキュラムは"卒業後"も"無料"で利用可能

受講したいけど、仕事が急に忙しくなるかもしれないから受講するか迷っている・・・そんな方も多いのではないでしょうか?ご安心ください。カリキュラムは期間終了後も「無料」で使うことができます。また、しっかり学習時間を確保した方も、振り返って学習することでプログラミングスキルがご自身に馴染んできます。

▼まずは無料でWebデザインのカリキュラムを体験しよう!

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
2018-01-15 13:23
今回の記事では、WebCampで1ヶ月間Rubyを学習し、Webエンジニアとして転職した卒業生の田中さんにお話を伺いました。 <プロフィール> 田中 デニス 昭彦さん(...
関連キーワード
Rubyの関連記事
  • 【Ruby入門説明書】rescueについて解説
  • 【Ruby入門説明書】jsonについて解説
  • 【Ruby入門説明書】csvについて解説
  • 【Ruby入門説明書】mapについて解説
  • 【Ruby入門説明書】gemsについて解説
  • 【Ruby入門説明書】ruby sliceについて解説
おすすめの記事