マッチングとキャプチャ
match とキャプチャです。
「マッチングとキャプチャ」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
MatchDataオブジェクト
regex.match(string)を呼び出すと、成功時にはMatchDataオブジェクトが返され、失敗時にはnilが返されます。
MatchDataには、マッチしたテキストとキャプチャされたグループが格納されます。
m = /world/.match('hello world')
puts m.class
puts(m[0])マッチ全体:インデックス0
MatchDataのインデックス0には、グループの有無にかかわらず、常にマッチした部分文字列全体が入ります。
m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)キャプチャグループ
丸括弧( )を使うとキャプチャグループを作成できます。各グループには1から始まる番号でアクセスできます。
m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])capturesメソッド
capturesは、キャプチャされたすべてのグループを配列として返します(インデックス0のマッチ全体は含まれません)。
m = /(\w+)@(\w+)/.match('alice@example')
p m.capturesキャプチャの分割代入
capturesは配列を返すため、その結果を変数に直接分割代入できます。
user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts hostマッチ前後のテキスト
MatchDataには、マッチの前後にあるテキストを取得するメソッドがあります。
pre_matchはマッチの前の部分post_matchはマッチの後の部分
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)scanですべてのマッチを検索
String#scanは、最初の1件だけでなく、文字列内のすべてのマッチを配列として返します。
nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p numsscanとグループ
パターンにグループがある場合、scanはマッチごとに1つの配列を持つ配列を返します。各配列には、そのマッチのキャプチャが格納されます。
pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairsnilを安全に扱う
matchは何もマッチしないとnilを返すことを常に覚えておいてください。結果を使う前に、nilでないことを確認します。
m = /(\d+)/.match('no digits here')
if m
puts m[1]
else
puts 'no match found'
end特殊変数
マッチに成功すると、Rubyはグローバル変数を設定します。$~はMatchData、$1や$2は番号付きキャプチャです。
これらは短いスクリプトでは便利ですが、実際のコードではMatchDataを明示的に扱うほうが分かりやすくなります。
if 'name: Alice' =~ /name: (\w+)/
puts $1
end日付の抽出
グループとキャプチャを組み合わせると、文字列から構造化されたデータを1ステップで取り出せます。
year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"簡単な確認
'a=1 b=2'.scan(/(\w)=(\d)/)を実行した場合、結果はどのような形になりますか。
まとめ:マッチとキャプチャ
これで、マッチした部分からデータを抽出できるようになりました。
matchはMatchDataまたはnilを返す- インデックス0はマッチ全体、1以降はグループ
capturesはすべてのグループを配列として返すscanは文字列内のすべてのマッチを見つける- 常に
nilを考慮して処理する
p 'x1 y2 z3'.scan(/([a-z])(\d)/)よくある質問
「マッチングとキャプチャ」レッスンは無料ですか?
はい。「マッチングとキャプチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「マッチングとキャプチャ」で何を学びますか?
match とキャプチャです。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「マッチングとキャプチャ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 正規表現リテラル
- マッチングとキャプチャ
- 置換
- 名前付きグループとアンカー