正規表現リテラル
パターンの基礎です。
「正規表現リテラル」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 正規表現リテラル
- マッチングとキャプチャ
- 置換
- 名前付きグループとアンカー