0Pricing
Swift Academy · Lektion

Capture-Gruppen

Extrahieren Sie Teilstrings aus Treffern.

Capture-Gruppen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Erfassungsgruppen

Klammern in einem Regex erzeugen Erfassungsgruppen. Jede Gruppe speichert die von ihr gefundene Teilzeichenfolge, sodass Sie strukturierte Bestandteile aus einem größeren Treffer extrahieren können.

Eine einzelne Erfassung

Wenn Sie einen Teil des Musters in () einschließen, wird er erfasst. Die Trefferausgabe wird zu einem Tupel: zuerst der gesamte Treffer, danach jede Erfassung.

if let m = "v2".firstMatch(of: /v(\d+)/) {
    print("Whole: \(m.0)")
    print("Group: \(m.1)")
}

Mehrere Erfassungen

Jedes Klammerpaar fügt dem Ausgabetupel ein weiteres Element hinzu, und zwar in der Reihenfolge von links nach rechts.

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)")
}

Der gesamte Treffer ist .0

Das Element .0 der Ausgabe enthält immer den gesamten gefundenen Text. Die Erfassungen beginnen bei .1.

if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
    print("Full: \(m.0)")
    print("Key: \(m.1), Value: \(m.2)")
}

Erfassungen sind Teilzeichenfolgen

Standardmäßig sind Erfassungen Werte vom Typ Substring, die auf einen Bereich in der ursprünglichen Zeichenfolge verweisen. Konvertieren Sie sie mit String(...), wenn Sie sie behalten müssen.

if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
    let letters = String(m.1)
    let numbers = String(m.2)
    print(letters, numbers)
}

Optionale Erfassungen

Wenn eine Gruppe optional ist, also von ? gefolgt wird, kann ihre Erfassung nil sein, wenn sie nicht am Treffer beteiligt war.

if let m = "color".wholeMatch(of: /colou?(r)/) {
    print("Captured: \(m.1)")
}

Benannte Erfassungen

Sie können eine Gruppe mit (?<name>...) benennen und über die benannte Ausgabe auslesen. Das ist verständlicher als numerische Indizes.

let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
    print("Area: \(m.area)")
    print("Line: \(m.line)")
}

Über Erfassungen iterieren

Kombinieren Sie Erfassungen mit matches(of:), um strukturierte Daten aus vielen Treffern auf einmal zu extrahieren.

let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
    print("\(m.1) -> \(m.2)")
}

Verschachtelte Gruppen

Gruppen können verschachtelt werden. Die äußere Gruppe erfasst das Ganze, innere Gruppen erfassen Teile davon. Die Nummerierung folgt der Reihenfolge der öffnenden Klammern.

if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
    print("All: \(m.1)")
    print("H: \(m.2), M: \(m.3)")
}

Nicht erfassende Gruppen

Verwenden Sie (?:...), um zu gruppieren, ohne eine Erfassung anzulegen, wenn Sie die Gruppierung nur für einen Quantifizierer benötigen und kein zusätzliches Tupel-Element wünschen.

if let m = "abab".wholeMatch(of: /(?:ab)+/) {
    print("Matched: \(m.0)")
}

Einen Parser erstellen

Erfassungen verwandeln Rohtext in typisierte Werte. Hier analysieren wir eine Koordinatenzeichenfolge und wandeln sie in Ganzzahlen um.

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")

Kurze Überprüfung

Was ist bei dem Muster /(\d{4})-(\d{2})/, das auf "2024-05" zutrifft, der Wert von m.2?

Zusammenfassung

Klammern erzeugen Erfassungsgruppen, die als Tupel zugänglich sind. Dabei enthält .0 den gesamten Treffer und .1, .2 usw. die Erfassungen. Sie haben benannte, optionale, verschachtelte und nicht erfassende Gruppen kennengelernt. Als Nächstes erstellen Sie mit RegexBuilder Regexes aus gut lesbarem Swift-Code.

Häufig gestellte Fragen

Ist die Lektion „Capture-Gruppen“ kostenlos?

Ja — der vollständige Text von „Capture-Gruppen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Capture-Gruppen“?

Extrahieren Sie Teilstrings aus Treffern. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Capture-Gruppen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Regex-Literale und -Vergleiche
  2. Capture-Gruppen
  3. RegexBuilder-DSL
  4. Text ersetzen und aufteilen
← Zurück zu Swift Academy