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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:正規表現

この記事の練習問題を解くために必要な知識:
基礎文法、制御構造、メソッド、コレクション(レッスン1~4)クラスの定義と使用イニシャライザアクセスメソッドクラス変数とクラスメソッドprivateメソッド正規表現クラスの継承ファイル操作オーバーライドモジュールの定義と使用ミックスイン

<<前のページ Ruby記事一覧 次のページ>>

Rubyの「正規表現」とは

ここでは正規表現の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。

正規表現はテキストや文字列を操作する際に使う便利なツールです。

たとえば「メールアドレスを探す」や「文章の中から特定の単語を見つける」といった作業を、自動的に行うことができます。

この章ではRubyで正規表現を使う方法を、初心者向けに分かりやすく解説していきます。

正規表現とは?

正規表現(Regular Expression)は「文字列のパターン」を定義する方法です。

たとえば「数字だけの文字列」や「特定の単語を含む文章」などを簡単に見つけることができます。

具体例:

  1. 数字だけを探す ⇒ /\d+/
  2. 「Ruby」という単語を探す ⇒ /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では/を使った直感的な記述で、正規表現を扱えます。

最初は基本的な例から始め、少しずつ慣れていきましょう!

正規表現の練習問題:メールアドレスを検証しよう

メールアドレスが正しい形式かどうかを検証するプログラムを作成しましょう。

正規表現を使用し、ユーザーから入力されたメールアドレスが有効な形式かを判定します。

結果は「有効なメールアドレスです」または「無効なメールアドレスです」と表示されるようにします。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • メールアドレスの形式を正規表現で定義し、そのパターンに合致するかどうかを確認すること。
  • ユーザーからメールアドレスを入力してもらうこと。
  • 正規表現を使って、メールアドレスが有効かどうかを判定するメソッドを作成すること。
  • メールアドレスが有効な場合には「有効なメールアドレスです」と表示し、無効な場合には「無効なメールアドレスです」と表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

メールアドレスを入力してください:
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に代入します。

  • gets:ユーザーの入力を取得します。
  • chomp:末尾の改行を削除します。

メソッドの呼び出し

validate_email(input_email)
〇 メソッドの呼び出し

validate_email(input_email):ユーザーが入力したメールアドレスを検証するため、validate_emailメソッドを呼び出しています。

まとめ

今回の例では正規表現を使ってメールアドレスの形式をチェックしました。

Rubyでは正規表現を活用することで、簡潔かつ効果的にデータ検証を行うことができます。

ぜひこのプログラムを参考にして、他のデータ形式(電話番号や郵便番号など)にも挑戦してみてください!

Rubyの柔軟性を活かして、楽しいプログラミングライフを送りましょう!

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Rubyテキスト&問題集へ戻る
    トップページへ戻る