0Pricing
Ruby Academy · Lekcja

Dopasowywanie i przechwytywanie

match i przechwycone fragmenty

Dopasowywanie i przechwytywanie to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Obiekty MatchData

Gdy wywołasz regex.match(string), Ruby zwróci obiekt MatchData w przypadku powodzenia albo nil w przypadku niepowodzenia.

MatchData przechowuje dopasowany tekst oraz wszystkie przechwycone grupy.

m = /world/.match('hello world')
puts m.class
puts(m[0])

Całe dopasowanie: indeks 0

Indeks 0 obiektu MatchData zawsze zawiera cały dopasowany podciąg, niezależnie od użytych grup.

m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)

Grupy przechwytujące

Nawiasy ( ) tworzą grupy przechwytujące. Do każdej grupy można odwołać się za pomocą numeru, zaczynając od 1.

m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])

Metoda captures

captures zwraca tablicę wszystkich przechwyconych grup (z wyłączeniem całego dopasowania o indeksie 0).

m = /(\w+)@(\w+)/.match('alice@example')
p m.captures

Destrukturyzacja przechwyconych wartości

Ponieważ captures zwraca tablicę, wynik można bezpośrednio zdestrukturyzować do zmiennych.

user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts host

Tekst przed dopasowaniem i po nim

MatchData udostępnia pomocnicze metody do odczytywania tekstu wokół dopasowania:

  • pre_match część przed dopasowaniem
  • post_match część po dopasowaniu
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)

scan dla wszystkich dopasowań

String#scan zwraca tablicę wszystkich dopasowań w ciągu znaków, a nie tylko pierwszego.

nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p nums

scan z grupami

Jeśli wzorzec zawiera grupy, scan zwraca tablicę tablic — po jednej dla każdego dopasowania, zawierającej przechwycone wartości tego dopasowania.

pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairs

Bezpieczna obsługa nil

Należy zawsze pamiętać, że match zwraca nil, gdy nic nie pasuje. Przed użyciem wyniku należy sprawdzić, czy nie jest to nil.

m = /(\d+)/.match('no digits here')
if m
  puts m[1]
else
  puts 'no match found'
end

Zmienne specjalne

Po pomyślnym dopasowaniu Ruby ustawia zmienne globalne: $~ zawiera obiekt MatchData, a $1 i $2 zawierają przechwycone wartości o numerach odpowiadających grupom.

Są przydatne w krótkich skryptach, ale w rzeczywistym kodzie wyraźniejsze jest jawne używanie obiektu MatchData.

if 'name: Alice' =~ /name: (\w+)/
  puts $1
end

Wyodrębnianie daty

Połączenie grup i przechwyconych wartości pozwala w jednym kroku wyodrębnić z ciągu znaków ustrukturyzowane dane.

year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"

Szybkie sprawdzenie

Jaki kształt ma wynik wyrażenia 'a=1 b=2'.scan(/(\w)=(\d)/)?

Podsumowanie: dopasowywanie i przechwytywanie

Potrafisz już wyodrębniać dane z dopasowań:

  • match zwraca MatchData albo nil
  • Indeks 0 oznacza całe dopasowanie, a indeksy 1 i wyższe — grupy
  • captures zwraca wszystkie grupy jako tablicę
  • scan wyszukuje każde dopasowanie w ciągu znaków
  • Zawsze należy sprawdzać, czy wynik nie jest równy nil
p 'x1 y2 z3'.scan(/([a-z])(\d)/)

Często zadawane pytania

Czy lekcja „Dopasowywanie i przechwytywanie” jest bezpłatna?

Tak — pełny tekst „Dopasowywanie i przechwytywanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Dopasowywanie i przechwytywanie”?

match i przechwycone fragmenty Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Dopasowywanie i przechwytywanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Literały wyrażeń regularnych
  2. Dopasowywanie i przechwytywanie
  3. Podstawianie
  4. Nazwane grupy i kotwice
← Powrót do Ruby Academy