0Pricing
Ruby Academy · レッスン

正規表現リテラル

パターンの基礎です。

「正規表現リテラル」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

正規表現とは

正規表現(regex)は、テキストとのマッチに使うパターンです。Rubyでは、正規表現はRegexpクラスの第一級オブジェクトです。

正規表現は、文字列の一部を検索、検証、抽出するために使います。

  • 単語、数字、記号にマッチさせる
  • メールアドレスや電話番号を検証する
  • 整理されていないテキストから部分文字列を抽出する
pattern = /hello/
puts pattern.class
puts(pattern.match?('hello world'))

スラッシュを使った正規表現リテラル

Rubyで正規表現を書く最も一般的な方法は、2つのスラッシュの間に記述することです。/pattern/

これは正規表現リテラルと呼ばれます。スラッシュの間にあるすべての部分がパターンです。

ruby = /ruby/
puts ruby.class
puts(ruby.match?('I love ruby'))
puts(ruby.match?('I love python'))

=~マッチ演算子

=~演算子は、文字列を正規表現に対して検査します。最初にマッチした位置のインデックスを返し、マッチしなければnilを返します。

puts('hello world' =~ /world/)
puts(('hello world' =~ /xyz/).inspect)

Boolean値を返すmatch?

単に「はい」か「いいえ」だけが必要な場合は、match?を使います。trueまたはfalseを返し、MatchDataオブジェクトを作成しないため高速です。

puts(/\d/.match?('abc123'))
puts(/\d/.match?('abcdef'))

文字クラス

角括弧で指定する文字クラスは、集合に含まれる任意の1文字にマッチします。

  • [abc]はa、b、またはcにマッチします
  • [a-z]は任意の小文字にマッチします
  • [0-9]は任意の数字にマッチします
puts(/[aeiou]/.match?('sky'))
puts(/[aeiou]/.match?('tree'))
puts(/[0-9]/.match?('room 7'))

短縮文字クラス

Rubyには、よく使う文字クラスのための短縮エスケープが用意されています。

  • \dは数字、\Dは数字以外
  • \wは単語文字(英字、数字、アンダースコア)
  • \sは空白文字、\Sは空白文字以外
puts(/\d\d/.match?('age 42'))
puts(/\w+/.match?('hello_99'))
puts(/\s/.match?('no_space'))

ドットと量指定子

ドット.は、改行を除く任意の1文字にマッチします。量指定子は繰り返し回数を指定します。

  • *は0回以上
  • +は1回以上
  • ?は0回または1回
  • {2,4}は2回以上4回以下
puts(/ab+c/.match?('abbbc'))
puts(/colou?r/.match?('color'))
puts(/\d{3}/.match?('id 451'))

パイプによる選択

パイプ|はORを意味します。パターンcat|dogは、どちらか一方の単語にマッチします。

大きなパターンの中で選択をグループ化するには、丸括弧を使います。

pet = /cat|dog/
puts(pet.match?('I have a dog'))
puts(pet.match?('I have a fish'))
puts(/^(yes|no)$/.match?('yes'))

大文字と小文字を区別しないフラグ

閉じスラッシュの後にiフラグを追加すると、マッチで大文字と小文字を区別しなくなります。

その他の便利なフラグには、m(ドットが改行にマッチ)やx(拡張モード、空白を無視)があります。

puts(/ruby/i.match?('I love RUBY'))
puts(/ruby/.match?('I love RUBY'))

文字列から正規表現を作成する

Regexp.newを使うと、実行時に正規表現を作成できます。特殊文字を含む可能性のあるユーザー入力を安全に含めるには、Regexp.escapeを使います。

word = 'price'
pattern = Regexp.new(word)
puts(pattern.match?('the price is high'))
puts(Regexp.escape('a.b*c'))

アンカーの概要

アンカーは文字ではなく位置にマッチします。

  • ^は行の先頭
  • $は行の末尾
  • \Aは文字列の先頭
  • \zは文字列の末尾

これらについては、後で詳しく学びます。

puts(/^Hello/.match?('Hello there'))
puts(/world$/.match?('hello world'))

簡単な確認

正規表現が文字列にマッチしたとき、=~演算子は何を返しますか。

まとめ:正規表現リテラル

Rubyの正規表現の基礎を学びました。

  • 正規表現リテラルは/slashes/のようにスラッシュの間に記述する
  • =~はインデックスを返し、match?はtrue/falseを返す
  • 文字クラスは[ ]、短縮表記は\d \w \s
  • 量指定子は* + ? {n,m}、選択は|
  • iフラグで大文字と小文字を区別しないマッチになる

次は、マッチした部分をキャプチャします。

puts(/\w+@\w+\.\w+/i.match?('USER@Mail.com'))

よくある質問

「正規表現リテラル」レッスンは無料ですか?

はい。「正規表現リテラル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「正規表現リテラル」で何を学びますか?

パターンの基礎です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「正規表現リテラル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 正規表現リテラル
  2. マッチングとキャプチャ
  3. 置換
  4. 名前付きグループとアンカー
← Ruby Academyに戻る