Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyでは複数の条件に応じて処理を分岐するのにcase~when文を使います。ではwhen文の条件に正規表現を使えるのをご存じでしょうか。

正規表現は、特別な意味を持つ文字を組み合わせることで、複雑文字列のパターン検索が可能な機能で、Rubyに限らず文字列の検索等でよく使われる機能です。そしてRubyではwhen文に指定する条件として正規表現を利用できます。

今回は、case~when文の条件に正規表現を使う方法と、その使用例を紹介します。

Rubyのcase~when文の基本

Rubyでは、複数の条件を分岐する書き方としてif~else文の他にcase~when文を利用できます。使い方はcaseに続いて検査する式を指定し、whenに続けて条件を記述し、さらにelseに続けて条件に合わないケースの処理も記述可能です。

次からRubyにおけるcase~when文の基本について紹介します。

case~when文の文法

case~when文は、先ほど簡単に紹介したように、case句に続けて変数などを使った検査対象の式を指定し、whenに続けて条件式で指定することで、その条件に一致した場合にthenに続いて記述された処理を実行します。そしてcaseに続いて、複数のwhenを指定可能です。

case~when文の文法

case 検査対象の式
when 条件式1 then
条件式1に一致したら実行する処理
when 条件式1 then
条件式1に一致したら実行する処理

else
whenで指定した条件式に該当しない場合の処理
end

whenで指定する条件とは

case~when文では、caseで指定した検査対象の式と条件式を、「===」で等しいかどうかをチェックします。

なおRubyには、等価チェックする演算子として「==」と「===」の2つあり、この2つは機能が違います。具体的には文字列や数字は「==」と「===」は同じです。しかし、クラスのインスタンスであるかどうかをチェックしたり、正規表現によるチェックができるのは「===」だけです。

このようにwhenの条件式では「===」で評価するので、条件式として正規表現を使用できます。

whenに続けて正規表現を指定できる

先ほど紹介したように、case~when文ではwhenに続けて正規表現を指定できるので、次のような使い方が可能です。

whenで正規表現を使った例

case postno
when /\d{7}/
  数字7桁の場合の処理
when /\d{3}-\d{4}/
  数字3桁と数字4桁の間に「-」を入れた場合
else
  間違った入力の場合
end

この例では、whenの条件式として、「/\d{7}/」と「/\d{3}-\d{4}/」の2つの正規表現を使用しています。

ポテパンダの一言メモ

case~when句では正規表現以外にも、他のプログラミング言語には無い便利な機能があります。興味のなる方は、下記の記事も参照してください。

【Ruby入門】case文の基本とRubyらしい応用例の書き方


【Ruby入門】case文の基本とRubyらしい応用例の書き方

Rubyで正規表現を使うには

Rubyのプログラムで正規表現を使うには、スラッシュで囲んだ形式で利用するか、Regexpクラスのオブジェクトを利用します。そして、この2つの書き方は、whenの条件式としても利用可能です。次からRubyの正規表現の書き方を紹介します。

スラッシュで囲む

ifなどの条件式としてよく使われる正規表現が、スラッシュで囲んだ書き方です。正規表現では特別な働きをする文字列をメタ文字といいますが、メタ文字とそれ以外の文字を組み合わせた文字列をスラッシュで囲むと、その文字列が正規表現として扱われます。

例えば、文字列「pat」を含む文字列を正規表現で記述すれば、次のようにスラッシュで囲みます。

文字列「pat」を含む正規表現
/pat/

またメタ文字「[a-z]」を含む正規表現を作る場合、次のように記述します。

メタ文字「[a-z]」を含む正規表現
/[a-z]/

if構文で正規表現を使う例

if target =~ /pat/ then
  puts "/pat/ に一致"
end

Regexpクラスのオブジェクトを作る

Rubyで正規表現を利用する場合、Regexpクラスのnewメソッドでオブジェクトを作成し、それを先ほどのスラッシュで囲った正規表現の代わりに使うことも可能です。そしてこのオブジェクトはwhenに続く条件式にも使用できます。

先ほどのスラッシュで宣言した正規表現をRegexpクラスのオブジェクトとして作成した例が次のとおりです。

Regexpクラスのオブジェクトの例

chk1 = Regexp.new("pat")  # /pat/と同じ
chk2 = Regexp.new("[a-z]") # /[a-z]/と同じ

if構文で正規表現のオブジェクトを使う例

chk1 = Regexp.new("pat") 
if target =~ chk1 then
  puts "Regexpオブジェクトに一致"
end
ポテパンダの一言メモ

Rubyで正規表現を使う方法については、下記の記事も参考にしてください。

【Ruby入門】Rubyの正規表現


【Ruby入門】Rubyの正規表現

whenで正規表現を使う方法

先ほど紹介したように正規表現を使う場合、//で囲う書き方とRegexクラスのオブジェクトを利用する方法とがあり、どちらもwhen句で利用可能です。次からwhen句で正規表現を利用する方法を、例を使って解説します。

スラッシュで囲う書き方

正規表現で検索したいパターンの文字列が決まっている場合、スラッシュ「/」で囲む書き方を使います。例えばcaseでチェックしたい文字列が7桁の数字だった場合の処理をcase~whenで書いた例を次に紹介します。

whenでスラッシュを使った正規表現の例

case postno
when /\d{7}/
  puts "7桁の数字です"
when /\d{3}-\d{4}/
  puts "3桁-4桁の表現です"
else
  puts "間違っています"
end

正規表現のオブジェクトを用いる

先ほど紹介したようにRegexクラスを使うことで、正規表現のオブジェクトを作ることが可能です。そしてcase~whenで正規表現を利用する場合、先ほど紹介したスラッシュで囲う書き方の代わりに正規表現のオブジェクトを指定できます。

正規表現のオブジェクト使ったcase~whenの例

chk1 = Regexp.new("\\d{7}")
chk2 = Regexp.new("\\d{3}-\\d{4}")
case postno
when chk1
  puts "7桁の数字です"
when chk2
  puts"3桁-4桁の表現です"
else
  puts"間違っています"
end

この例では、正規表現の「/\d{7}/」を格納したオブジェクトchk1と正規表現の「\d{3}-\d{4}」を格納したオブジェクトchk2を使った例です。

正規表現を合成してチェックする

先ほど、Regexp.new()メソッドで文字列から正規表現のオブジェクトを作成してwhenで検索する方法を紹介しましたが、正規表現作成に用いる文字列はプログラムの中で合成できます。

例えば、次のように文字列を組み合わせて正規表現を作り、case~when構文で処理を分岐するプログラムを書くことが可能です。

複数の文字列から正規表現を作ってcase~whenで分岐する例

years = ["2021", "2020", "2019"]
code = "[a-z][a-z]\\d{3}"
chk1 = Regexp.new(years[0]+code)
chk2 = Regexp.new(years[1]+code)
chk3 = Regexp.new(years[2]+code)

case pno
when chk1
  puts years[0] + "に一致しました"
when chk2
  puts years[1] + "に一致しました"
when chk3
  puts years[2] + "に一致しました"
else
  puts "該当はありません"
end

まとめ

Rubyのcase~when構文を使用することで、複数のifを使うよりも読みやすいプログラムを記述できます。さらにwhenは正規表現も使えるので、複雑なパターンに一致したらそれぞれ処理を分岐させるプログラム作成も可能です。

なおRubyでは、スラッシュで囲む正規表現の書き方とRegexpクラスを用いた正規表現のオブジェクトを利用できます。今回紹介したようにメタ文字やパターンの組み合わせの文字列を合成し、正規表現のオブジェクトにしてwhenで利用することも可能です。

case~when構文の処理で求められる条件式に合わせて、うまく活用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。