Fangegrupper
Trekk ut delstrenger fra treff.
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.
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.