0Pricing
Swift Academy · Lekcja

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

  1. Literały wyrażeń regularnych i dopasowywanie
  2. Grupy przechwytujące
  3. DSL RegexBuilder
  4. Zastępowanie i dzielenie tekstu
← Powrót do Swift Academy