0Pricing
Swift Academy · Lezione

DSL RegexBuilder

Componi regex con un builder leggibile.

DSL RegexBuilder è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

DSL RegexBuilder

I literal regex complessi diventano difficili da leggere. Il modulo RegexBuilder consente di costruire pattern dal codice Swift usando una DSL basata su result builder, con componenti e tipi denominati.

Importare RegexBuilder

Importi il modulo, quindi costruisca un Regex con il builder Regex { ... }. Al suo interno, ogni riga rappresenta una parte sequenziale del pattern.

import RegexBuilder

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

OneOrMore

OneOrMore(...) corrisponde a una o più occorrenze del componente indicato, come +. .digit è una classe di caratteri integrata.

import RegexBuilder

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

ZeroOrMore e Optionally

ZeroOrMore corrisponde a * e Optionally a ?. Consentono di ripetere o saltare parti del pattern.

import RegexBuilder

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

Capture

Capture { ... } crea un gruppo di cattura. La sottostringa corrispondente appare nella tupla di output, proprio come accade con le parentesi in un literal.

import RegexBuilder

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

Trasformare le catture

Un Capture può includere una closure di trasformazione che converte il testo corrispondente in un valore tipizzato, così l'output è già un Int o un altro tipo.

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

Usi CharacterClass o elementi integrati come .word, .whitespace e intervalli come ("a"..."z") per definire quali caratteri sono consentiti.

import RegexBuilder

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

Ancore nel builder

Aggiunga Anchor.startOfLine e Anchor.endOfLine per inserire asserzioni posizionali nel builder.

import RegexBuilder

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

Componenti riutilizzabili

È possibile memorizzare i sottopattern in variabili e combinarli, rendendo le regex di grandi dimensioni modulari e leggibili.

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

Più catture

Ogni Capture aggiunge un elemento all'output nell'ordine, quindi un parser di date espone separatamente anno, mese e giorno.

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

Scegliere tra DSL e literal

Usi i literal per i pattern brevi e la DSL per quelli lunghi che traggono vantaggio da nomi, tipi e trasformazioni. Sono intercambiabili e possono anche essere annidati.

import RegexBuilder

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

Verifica rapida

Quale componente di RegexBuilder corrisponde a una o più occorrenze di un elemento?

Riepilogo

La DSL RegexBuilder costruisce regex dal codice Swift con Regex { }, usando OneOrMore, Optionally, Capture con trasformazioni, classi di caratteri e ancore. Rende i pattern complessi leggibili e sicuri rispetto ai tipi. Successivamente modificherà il testo sostituendolo e suddividendolo.

Domande Frequenti

La lezione «DSL RegexBuilder» è gratuita?

Sì — il testo completo di «DSL RegexBuilder» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «DSL RegexBuilder»?

Componi regex con un builder leggibile. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «DSL RegexBuilder»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Letterali regex e pattern matching
  2. Gruppi di cattura
  3. DSL RegexBuilder
  4. Sostituzione e suddivisione del testo
← Torna a Swift Academy