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.capturesDestrukturyzacja 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 hostTekst przed dopasowaniem i po nim
MatchData udostępnia pomocnicze metody do odczytywania tekstu wokół dopasowania:
pre_matchczęść przed dopasowaniempost_matchczęść 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 numsscan 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 pairsBezpieczna 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'
endZmienne 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
endWyodrę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ń:
matchzwraca MatchData albo nil- Indeks 0 oznacza całe dopasowanie, a indeksy 1 i wyższe — grupy
captureszwraca wszystkie grupy jako tablicęscanwyszukuje 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
- Literały wyrażeń regularnych
- Dopasowywanie i przechwytywanie
- Podstawianie
- Nazwane grupy i kotwice