Swift Academy · leksjon

RegexBuilder-DSL

Sett sammen regexer med en lesbar builder.

Leksjon 3 av 413 trinn

RegexBuilder-DSL er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 3 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.

RegexBuilder-DSL

Komplekse regex-literaler blir vanskelige å lese. Modulen RegexBuilder lar deg bygge mønstre fra Swift-kode ved hjelp av en result-builder-DSL, med navngitte komponenter og typer.

Importere RegexBuilder

Importer modulen, og konstruer deretter en Regex med builderen Regex { ... }. Inne i builderen er hver linje en del av mønsteret i rekkefølge.

import RegexBuilder

let re = Regex {
    "ID-"
    OneOrMore(.digit)
}
print("ID-42".contains(re))

OneOrMore

OneOrMore(...) samsvarer med én eller flere forekomster av den angitte komponenten, tilsvarende +. .digit er en innebygd tegnklasse.

import RegexBuilder

let number = Regex {
    OneOrMore(.digit)
}
if let m = "abc789".firstMatch(of: number) {
    print(m.0)
}

ZeroOrMore og Optionally

ZeroOrMore tilsvarer *, og Optionally tilsvarer ?. De gjør deler av mønsteret repeterbare eller valgfrie.

import RegexBuilder

let re = Regex {
    "color"
    Optionally("u")
    "r"
}
print("colour".wholeMatch(of: re) != nil)
print("color".wholeMatch(of: re) != nil)

Capture

Capture { ... } oppretter en fangstgruppe. Den treffede delstrengen vises i resultat-tuplen, akkurat som parenteser i et literal.

import RegexBuilder

let re = Regex {
    "v"
    Capture { OneOrMore(.digit) }
}
if let m = "v123".wholeMatch(of: re) {
    print("Version: \(m.1)")
}

Transformere fangster

En Capture kan inneholde en transformasjons-closure som konverterer den treffede teksten til en typet verdi, slik at resultatet allerede er en Int eller en annen type.

import RegexBuilder

let re = Regex {
    Capture {
        OneOrMore(.digit)
    } transform: { Int($0)! }
}
if let m = "42".wholeMatch(of: re) {
    let n: Int = m.1
    print(n + 1)
}

CharacterClass

Bruk CharacterClass eller innebygde verdier som .word, .whitespace og områder som ("a"..."z") for å definere hvilke tegn som er tillatt.

import RegexBuilder

let re = Regex {
    One(.word)
    ZeroOrMore(("a"..."z"))
}
print("hello".contains(re))

Forankringer i builderen

Legg til Anchor.startOfLine og Anchor.endOfLine for posisjonssjekker inne i builderen.

import RegexBuilder

let re = Regex {
    Anchor.startOfLine
    OneOrMore(.digit)
    Anchor.endOfLine
}
print("100".wholeMatch(of: re) != nil)

Gjenbrukbare komponenter

Du kan lagre delmønstre i variabler og sette dem sammen, noe som gjør store regex-er modulære og lettleste.

import RegexBuilder

let field = Reference(Substring.self)
let re = Regex {
    Capture(as: field) { OneOrMore(.word) }
}
if let m = "name".firstMatch(of: re) {
    print(m[field])
}

Flere fangster

Hver Capture legger til et resultatelement i rekkefølge, slik at en datoparser viser år, måned og dag hver for seg.

import RegexBuilder

let date = Regex {
    Capture { Repeat(.digit, count: 4) }
    "-"
    Capture { Repeat(.digit, count: 2) }
}
if let m = "2024-05".wholeMatch(of: date) {
    print("\(m.1) / \(m.2)")
}

Velge DSL eller literal

Bruk literaler for korte mønstre og DSL for lange mønstre som har nytte av navn, typer og transformasjoner. De kan brukes om hverandre og kan også nøstes.

import RegexBuilder

let re = Regex {
    "#"
    Capture { /[0-9a-fA-F]{6}/ }
}
if let m = "#FF8800".wholeMatch(of: re) {
    print("Hex: \(m.1)")
}

Hurtigsjekk

Hvilken RegexBuilder-komponent samsvarer med én eller flere forekomster av noe?

Oppsummering

RegexBuilder-DSL-en bygger regex-er fra Swift-kode med Regex { } og bruker OneOrMore, Optionally, Capture med transformasjoner, tegnklasser og forankringer. Den gjør komplekse mønstre lettleste og typesikre. Neste gang skal du endre tekst ved å erstatte og dele den opp.

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 «RegexBuilder-DSL» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «RegexBuilder-DSL», 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 «RegexBuilder-DSL»?

Sett sammen regexer med en lesbar builder. 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 3 av 4.

Hvor lang tid tar leksjonen «RegexBuilder-DSL»?

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