0Pricing
Ruby Academy · レッスン

名前付きグループとアンカー

高度な正規表現です。

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

名前付きグループを使う理由

パターンが大きくなると、m[1]のような番号付きキャプチャは読みにくくなります。名前付きグループを使うと、各キャプチャに意味のある名前を付けられます。

構文は(?<name>pattern)です。

m = /(?<year>\d{4})-(?<month>\d{2})/.match('2026-05')
puts(m[:year])
puts(m[:month])

名前付きキャプチャにアクセスする

名前付きキャプチャには、SymbolまたはStringのキーでアクセスできます。m[:name]のように記述します。named_capturesメソッドを使うと、すべてをHashとして取得できます。

m = /(?<user>\w+)@(?<host>\w+)/.match('alice@mail')
p m.named_captures

=~と名前付きグループ

名前付きグループを含む正規表現リテラルを=~の左辺に置くと、Rubyは各名前に対応するローカル変数を自動的に作成します。

if /(?<word>\w+)/ =~ 'hello'
  puts word
end

アンカー:先頭と末尾

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

  • ^は行の先頭
  • $は行の末尾

入力全体がマッチすることを検証するうえで重要です。

puts(/^abc/.match?('abcdef'))
puts(/def$/.match?('abcdef'))
puts(/^abc$/.match?('abcdef'))

文字列アンカー \Aと\z

^と$は行の境界にマッチするため、複数行の文字列では注意が必要です。文字列全体を対象にする場合は、\A(先頭)と\z(末尾)を使うことをおすすめします。

text = "first\nsecond"
puts(/^second/.match?(text))
puts(/\Asecond/.match?(text))

入力全体を検証する

文字列全体がある形式に一致することを確認するには、両端にアンカーを付けます。これにより、余分な文字を含む文字列を拒否できます。

zip = /\A\d{5}\z/
puts(zip.match?('34000'))
puts(zip.match?('34000x'))

単語境界

\bは単語境界です。単語文字と単語文字以外の文字の間にある位置を表します。文字を消費せずに単語全体にマッチします。

puts('cat catalog'.scan(/\bcat\b/).length)
puts('cat catalog'.scan(/cat/).length)

先読み

肯定先読み(?=...)は、次に続く内容をマッチに含めずに検証します。否定先読みは(?!...)です。

puts('100 dollars'.match(/\d+(?= dollars)/)[0])
puts('apple pie'.match?(/apple(?! juice)/))

後読み

後読み(?<=...)は、マッチの前にある内容を検証します。否定後読みは(?<!...)です。

m = '$42'.match(/(?<=\$)\d+/)
puts(m[0])

非キャプチャグループ

選択や量指定子のためにグループ化が必要でも、キャプチャはしたくない場合があります。そのときは(?:...)を非キャプチャグループとして使います。

m = /(?:Mr|Ms)\. (\w+)/.match('Ms. Lee')
p m.captures

すべてを組み合わせる

実用的なバリデーターでは、アンカー、名前付きグループ、量指定子を組み合わせて使います。

re = /\A(?<area>\d{3})-(?<num>\d{4})\z/
m = re.match('555-1234')
puts(m[:area])
puts(m[:num])

簡単な確認

文字列全体がマッチすることを、改行を無視して確認するには、どのアンカーを使うべきですか。

まとめ:名前付きグループとアンカー

高度な正規表現の機能を習得しました。

  • 名前付きグループ(?<name>...)とnamed_captures
  • アンカー^ $ \A \z \b
  • 先読み(?=) / (?!)と後読み(?<=) / (?<!)
  • 非キャプチャグループ(?:...)
puts(/\A(?<id>\d+)\z/.match('42')[:id])

よくある質問

「名前付きグループとアンカー」レッスンは無料ですか?

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

「名前付きグループとアンカー」で何を学びますか?

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

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

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

「名前付きグループとアンカー」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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