Swift Academy · leksjon

Fangegrupper

Trekk ut delstrenger fra treff.

Leksjon 2 av 413 trinn

Fangegrupper er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Fangstgrupper

Parenteser i et regex oppretter fangstgrupper. Hver gruppe husker delstrengen den traff, slik at du kan hente ut strukturerte deler fra et større treff.

Én fangst

Når du omslutter en del av et mønster med (), fanges den opp. Resultatet av treffet blir en tuple: først hele treffet, deretter hver fangst.

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

Flere fangster

Hvert parentespar legger til et nytt element i resultat-tuplen, i rekkefølge fra venstre mot høyre.

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

Hele treffet er .0

Element .0 i resultatet er alltid hele den treffede teksten. Fangstene begynner med .1.

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

Fangster er Substring-verdier

Som standard er fangster Substring-verdier som peker inn i originalstrengen. Konverter med String(...) hvis du trenger å beholde dem.

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

Valgfrie fangster

Hvis en gruppe er valgfri, altså etterfulgt av ?, kan fangsten være nil når gruppen ikke deltok i treffet.

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

Navngitte fangster

Du kan gi en gruppe et navn med (?<name>...) og lese den via det navngitte resultatet, som er tydeligere enn numeriske indekser.

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

Iterere over fangster

Kombiner fangster med matches(of:) for å hente ut strukturerte data fra mange treff samtidig.

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

Nestede grupper

Grupper kan nøstes. Den ytre gruppen fanger opp helheten, mens indre grupper fanger opp delene. Nummereringen følger rekkefølgen på de åpne parentesene.

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

Grupper uten fangst

Bruk (?:...) til å gruppere uten å fange opp, når du bare trenger gruppering for en kvantor og ikke ønsker et ekstra tuple-element.

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

Bygge en parser

Fangster gjør rå tekst om til typede verdier. Her analyserer vi en koordinatstreng og gjør den om til heltall.

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

Hurtigsjekk

For mønsteret /(\d{4})-(\d{2})/ som samsvarer med "2024-05", hva er m.2?

Oppsummering

Parenteser oppretter fangstgrupper som er tilgjengelige som en tuple, der .0 er hele treffet og .1, .2 ... er fangster. Du har sett navngitte, valgfrie, nestede og fangstfrie grupper. Neste gang skal du bygge regex-er fra lettlest Swift-kode med RegexBuilder.

Gratis å komme i gang

Lær deg Swift med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
122
Leksjoner
409

Ofte stilte spørsmål

Er leksjonen «Fangegrupper» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «Fangegrupper», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Fangegrupper»?

Trekk ut delstrenger fra treff. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Swift Academy?

Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Fangegrupper»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?

Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Regex-literaler og matching
  2. Fangegrupper
  3. RegexBuilder-DSL
  4. Erstatte og dele opp tekst
← Tilbake til Swift Academy