Grupy przechwytujące
Wyodrębnianie podciągów z dopasowań.
Grupy przechwytujące to bezpłatna lekcja Swift 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 Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Grupy przechwytujące
Nawiasy w wyrażeniu regularnym tworzą grupy przechwytujące. Każda grupa zapamiętuje dopasowany podnapis, dzięki czemu można wyodrębniać uporządkowane fragmenty z większego dopasowania.
Pojedyncze przechwycenie
Umieszczenie części wzorca w () powoduje jej przechwycenie. Wynik dopasowania staje się krotką: najpierw całe dopasowanie, a następnie każde przechwycenie.
if let m = "v2".firstMatch(of: /v(\d+)/) {
print("Whole: \(m.0)")
print("Group: \(m.1)")
}Wiele przechwyceń
Każda para nawiasów dodaje kolejny element do krotki wynikowej, w kolejności od lewej do prawej.
if let m = "2024-05-30".wholeMatch(of: /(\d{4})-(\d{2})-(\d{2})/) {
print("Year: \(m.1)")
print("Month: \(m.2)")
print("Day: \(m.3)")
}Całe dopasowanie to .0
Element .0 wyniku zawsze zawiera cały dopasowany tekst. Przechwycenia zaczynają się od .1.
if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
print("Full: \(m.0)")
print("Key: \(m.1), Value: \(m.2)")
}Przechwycenia są podnapisami
Domyślnie przechwycenia mają wartości typu Substring wskazujące fragmenty oryginalnego napisu. Jeśli trzeba je zachować, należy użyć konwersji String(...).
if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
let letters = String(m.1)
let numbers = String(m.2)
print(letters, numbers)
}Opcjonalne przechwycenia
Jeśli grupa jest opcjonalna (po grupie występuje ?), jej przechwycenie może mieć wartość nil, gdy grupa nie uczestniczyła w dopasowaniu.
if let m = "color".wholeMatch(of: /colou?(r)/) {
print("Captured: \(m.1)")
}Nazwane przechwycenia
Grupie można nadać nazwę za pomocą (?<name>...) i odczytywać ją przez nazwane wyjście, które jest czytelniejsze niż indeksy liczbowe.
let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
print("Area: \(m.area)")
print("Line: \(m.line)")
}Iterowanie po przechwyceniach
Połączenie przechwyceń z matches(of:) pozwala jednocześnie wyodrębniać uporządkowane dane z wielu dopasowań.
let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
print("\(m.1) -> \(m.2)")
}Zagnieżdżone grupy
Grupy mogą być zagnieżdżane. Grupa zewnętrzna przechwytuje całość, a grupy wewnętrzne poszczególne fragmenty. Numeracja jest zgodna z kolejnością otwierających nawiasów.
if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
print("All: \(m.1)")
print("H: \(m.2), M: \(m.3)")
}Grupy nieprzechwytujące
Użyj (?:...), aby grupować bez przechwytywania, gdy grupowanie jest potrzebne tylko do zastosowania kwantyfikatora i nie chcesz dodawać kolejnego elementu krotki.
if let m = "abab".wholeMatch(of: /(?:ab)+/) {
print("Matched: \(m.0)")
}Tworzenie parsera
Przechwycenia przekształcają surowy tekst w wartości określonych typów. W tym przykładzie napis współrzędnych jest analizowany jako liczby całkowite.
func parsePoint(_ s: String) -> (Int, Int)? {
guard let m = s.wholeMatch(of: /(\d+),(\d+)/),
let x = Int(m.1), let y = Int(m.2) else { return nil }
return (x, y)
}
print(parsePoint("3,7") ?? "nil")Szybkie sprawdzenie
Dla wzorca /(\d{4})-(\d{2})/ dopasowującego „2024-05” jaka jest wartość m.2?
Podsumowanie
Nawiasy tworzą grupy przechwytujące dostępne jako krotka, w której .0 oznacza całe dopasowanie, a .1, .2... oznaczają przechwycenia. Omówiono nazwane, opcjonalne, zagnieżdżone i nieprzechwytujące grupy. Następnie wyrażenia regularne zostaną utworzone za pomocą czytelnego kodu Swift z użyciem RegexBuilder.
Często zadawane pytania
Czy lekcja „Grupy przechwytujące” jest bezpłatna?
Tak — pełny tekst „Grupy przechwytujące” 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 Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Grupy przechwytujące”?
Wyodrębnianie podciągów z dopasowań. Ćwiczysz Swift 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ąć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift 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 „Grupy przechwytujące”?
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 Swift Academy?
Tak. Każda lekcja Swift 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 i dopasowywanie
- Grupy przechwytujące
- DSL RegexBuilder
- Zastępowanie i dzielenie tekstu