【Ruby】レッスン5-06:正規表現を理解しよう

一つ前のページではprivateメソッドについて学習しました。
今回は 正規表現 について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう
・Lesson5-2:イニシャライザを理解しよう
・Lesson5-3:アクセスメソッドを理解しよう
・Lesson5-4:クラス変数とクラスメソッドを理解しよう
・Lesson5-5:privateメソッドを理解しよう
・Lesson5-6:正規表現を理解しよう ◁今回はココ
・Lesson5-7:クラスの継承を理解しよう
・Lesson5-8:ファイル操作を理解しよう
・Lesson5-9:オーバーライドを理解しよう
・Lesson5-10:モジュールを使ってみよう
・Lesson5-11:ミックスインを使ってみよう
・確認問題5-☆1:モンスター捕獲ゲームを作ろう
・確認問題5-☆2:モンスターとの戦闘ゲームを作ろう
・確認問題5-☆3:マルバツゲームを作ろう
Rubyの正規表現を基礎から学ぼう

正規表現はテキストや文字列を操作する際に使う便利なツールです。
たとえば「メールアドレスを探す」や「文章の中から特定の単語を見つける」といった作業を、自動的に行うことができます。
この章ではRubyで正規表現を使う方法を、初心者向けに分かりやすく解説していきます。
正規表現の基本概念と用途を理解する
正規表現(Regular Expression)は「文字列のパターン」を定義する方法です。
たとえば「数字だけの文字列」や「特定の単語を含む文章」などを簡単に見つけることができます。
具体例:
- 数字だけを探す ⇒
/\d+/
- 「Ruby」という単語を探す ⇒
/Ruby/
Rubyでは正規表現を/
で囲んで使います。
正規表現の記述と検索処理
Rubyでは正規表現を使って文字列を検索したり、置き換えたりすることが簡単にできます。
基本例:文字列を検索
text = "私はRubyが好きです" if text =~ /Ruby/ #もし変数textの中にRubyという文字列があるならば puts "Rubyという文字が見つかりました!" end
このコードでは/Ruby/
が文字列"私はRubyが好きです"
の中から「Ruby」を探します。
=~
は「見つかった場所」を教えてくれる演算子です。
よく使われる正規表現記号とその意味
正規表現にはいくつかの「特殊な記号」があります。
これらを使うことでより柔軟な検索が可能になります。
基本ルール
.
: 任意の1文字\d
: 数字(0~9)\w
: 英数字やアンダースコア*
: 0回以上の繰り返し+
: 1回以上の繰り返し?
: 0回または1回[ ]
: 指定した文字のいずれか
実践で役立つ正規表現の活用例
簡単な例を2つ見ていきましょう。
1. 数字を探す
text = "電話番号は123-456-7890です" if text =~ /\d+/ puts "数字が見つかりました!" end
\d+
は「1つ以上の数字」を意味します。
2. 文字を置き換える
text = "私はRubyが好きです" new_text = text.gsub(/Ruby/, "プログラミング") puts new_text # => 私はプログラミングが好きです
gsub
は指定した文字列を別の文字列に置き換えるメソッドです。
正規表現の便利な使い方
正規表現の便利な使い方を2つ見てみましょう。
例1: メールアドレスをチェック
email = "test@example.com" if email =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i puts "正しいメールアドレスです!" else puts "メールアドレスが間違っています!" end
この正規表現はメールアドレスの形式が正しいかをチェックします。
例2: 簡単な単語検索
text = "プログラミングの勉強をしています" if text =~ /プログラミング/ puts "この文章には『プログラミング』が含まれています!" end
Rubyで正規表現を使いこなすために
正規表現を使えば文字列を探したり、置き換えたりする作業をとても簡単にできます。
Rubyでは/
を使った直感的な記述で、正規表現を扱えます。
最初は基本的な例から始め、少しずつ慣れていきましょう!
練習問題|正規表現でメールアドレスをチェックしよう

正規表現をしっかりと身に着けるため、練習問題に挑戦しましょう。
メールアドレス検証プログラムを作成しよう
メールアドレスが正しい形式かどうかを検証するプログラムを作成しましょう。
正規表現を使用し、ユーザーから入力されたメールアドレスが有効な形式かを判定します。
結果は「有効なメールアドレスです」または「無効なメールアドレスです」と表示されるようにします。
以下の要件に従ってコードを完成させてください。
- メールアドレスの形式を正規表現で定義し、そのパターンに合致するかどうかを確認すること。
- ユーザーからメールアドレスを入力してもらうこと。
- 正規表現を使って、メールアドレスが有効かどうかを判定するメソッドを作成すること。
- メールアドレスが有効な場合には「有効なメールアドレスです」と表示し、無効な場合には「無効なメールアドレスです」と表示すること。
ただし、以下のような実行結果となること。
メールアドレスを入力してください: test@example.com 有効なメールアドレスです
メールアドレスを入力してください: aaaaa 無効なメールアドレスです
【ヒント】自力で解くのが難しい人へ
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1:メソッドvalidate_emailの定義
□ 正規表現パターンを変数regexに代入
□ if文でemailがregexにマッチするかを判定
□ □ 真の場合、「有効なメールアドレスです」と出力
□ □ else文
□ □ □ 偽の場合、「無効なメールアドレスです」と出力
2:「メールアドレスを入力してください:」と出力
3:ユーザーの入力を取得し、chompメソッドで改行を削除して変数input_emailに代入
4:メソッドvalidate_emailを呼び出し、引数にinput_emailを渡す
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# メールアドレスを検証するメソッドの定義 def validate_email(email) # メールアドレスの正規表現パターン regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i # 正規表現を使ってメールアドレスを検証 =begin 【穴埋め問題1】 ここにif文を使って、正規表現がマッチした場合に「有効なメールアドレスです」を出力し、 そうでない場合に「無効なメールアドレスです」を出力するコードを書いてください。 =end end # ユーザーからの入力を受け取る puts "メールアドレスを入力してください:" input_email = gets.chomp =begin 【穴埋め問題2】 ここでvalidate_emailメソッドを呼び出し、ユーザーが入力したメールアドレスを引数として渡してください。 =end
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
この問題の解答例と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
# メールアドレスを検証するメソッドの定義 def validate_email(email) # メールアドレスの正規表現パターン regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i # 正規表現を使ってメールアドレスを検証 if email.match?(regex) # 有効なメールアドレスの場合 puts "有効なメールアドレスです" else # 無効なメールアドレスの場合 puts "無効なメールアドレスです" end end # ユーザーからの入力を受け取る puts "メールアドレスを入力してください:" input_email = gets.chomp # 入力されたメールアドレスを検証する validate_email(input_email)
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
メソッドの定義と正規表現による検証
def validate_email(email) regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i if email.match?(regex) puts "有効なメールアドレスです" else puts "無効なメールアドレスです" end end
〇 メソッドの定義
def validate_email(email)
:validate_email
という名前のメソッドを定義しています。- このメソッドは引数としてメールアドレス(
email
)を受け取ります。
〇 正規表現
regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
:メールアドレスの形式を検証するための正規表現を定義しています。〇
\A
:文字列の先頭を意味します。[\w+\-.]+
:英数字、アンダースコア、プラス記号、ハイフン、ドットが1文字以上続く部分を表します。@
:@
記号を表します。[a-z\d\-.]+
:ドメイン部分(英小文字、数字、ハイフン、ドットが1文字以上)。\.
:ドットを表します。[a-z]+
:トップレベルドメイン(英小文字が1文字以上)。\z
:文字列の終端。/i
:大文字小文字を区別しないことを指定するフラグです。
〇 正規表現を使用した判定
email.match?(regex)
:メールアドレスが正規表現regex
に一致するかどうかを判定します。- 一致しない場合、
"無効なメールアドレスです"
を出力します。 - 一致した場合、
"有効なメールアドレスです"
を出力。
ユーザーからの入力
puts "メールアドレスを入力してください:" input_email = gets.chomp
〇 出力
puts "メールアドレスを入力してください:"
:ユーザーにメールアドレスを入力するよう促します。〇 入力の基本
input_email = gets.chomp
:ユーザーが入力した内容を受け取り、改行を削除して変数input_email
に代入します。chomp
:末尾の改行を削除します。gets
:ユーザーの入力を取得します。
メソッドの呼び出し
validate_email(input_email)
validate_email(input_email)
:ユーザーが入力したメールアドレスを検証するため、validate_email
メソッドを呼び出しています。
まとめ
今回の例では正規表現を使ってメールアドレスの形式をチェックしました。
Rubyでは正規表現を活用することで、簡潔かつ効果的にデータ検証を行うことができます。
ぜひこのプログラムを参考にして、他のデータ形式(電話番号や郵便番号など)にも挑戦してみてください!
Rubyの柔軟性を活かして、楽しいプログラミングライフを送りましょう!
FAQ|Rubyの正規表現の基本と使い方に関するよくある質問
- Q1. Rubyでメールアドレスを正しく判定する正規表現パターンとは?
-
一般的な形式であれば
/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
が使われます。この正規表現は「英数字」「@」「ドメイン名」などを適切にチェックするもので、初心者にも扱いやすく安全です。
- Q2. Rubyで正規表現を使って文字列を置き換えるにはどうすればいいですか?
-
gsub
メソッドを使うことで、特定の文字列を他の文字列に置き換えることができます。例:text.gsub(/Ruby/, "プログラミング")
のように記述すれば、”Ruby” を “プログラミング” に変換できます。
- Q3. 正規表現で大文字・小文字を区別しない検索は可能ですか?
-
はい、正規表現の末尾に
i
フラグを付けることで大文字と小文字の違いを無視できます。例えば/ruby/i
と書くと “Ruby” や “RUBY”、”ruby” すべてにマッチします。