0Pricing
Swift Academy · Lezione

Letterali regex e pattern matching

Confronti i pattern con il tipo Regex.

Letterali regex e pattern matching è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 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.

Regex in Swift

Swift 5.7+ include le espressioni regolari native nella libreria standard e in Foundation. È possibile scrivere una regex come literal tra barre, ad esempio /\d+/, e il compilatore la verifica durante la compilazione.

Un literal regex

Un literal regex produce un valore Regex. Il suo tipo descrive ciò che restituisce la corrispondenza. Il pattern più semplice cerca una sequenza fissa di caratteri.

let pattern = /hello/
if "hello world".contains(pattern) {
    print("Found hello")
}

wholeMatch(of:)

wholeMatch(of:) ha successo solo se la stringa intera corrisponde al pattern. Restituisce una corrispondenza opzionale oppure nil se l'intera stringa non corrisponde.

let digits = /\d+/
if let m = "12345".wholeMatch(of: digits) {
    print("Whole match: \(m.output)")
} else {
    print("No whole match")
}

firstMatch(of:)

firstMatch(of:) analizza la stringa e restituisce la prima posizione in cui il pattern corrisponde all'interno della stringa.

let word = /\w+/
if let m = "  swift rocks".firstMatch(of: word) {
    print("First word: \(m.output)")
}

Accedere all'intervallo della corrispondenza

Una corrispondenza espone un range nella stringa originale, così è possibile sapere esattamente dove si è verificata.

let text = "abc123def"
if let m = text.firstMatch(of: /\d+/) {
    print("Matched: \(m.output)")
    print("At: \(text[m.range])")
}

Classi di caratteri

All'interno di un pattern, \d corrisponde a una cifra, \w a un carattere di parola e \s agli spazi bianchi. Le parentesi quadre definiscono un insieme personalizzato, come [aeiou].

let vowel = /[aeiou]/
if let m = "sky".firstMatch(of: vowel) {
    print("Vowel: \(m.output)")
} else {
    print("No vowels found")
}

Quantificatori

I quantificatori controllano le ripetizioni: * indica zero o più occorrenze, + una o più, ? un elemento opzionale e {n,m} un numero limitato di occorrenze.

let phone = /\d{3}-\d{4}/
print("555-1234".wholeMatch(of: phone) != nil)
print("12-34".wholeMatch(of: phone) != nil)

Ancore

Usi ^ per ancorare il pattern all'inizio e $ alla fine di una riga. Le ancore non consumano caratteri: verificano una posizione.

let startsWithCap = /^[A-Z]\w*/
if let m = "Swift".firstMatch(of: startsWithCap) {
    print("Matched: \(m.output)")
}

Corrispondenza senza distinzione tra maiuscole e minuscole

È possibile ignorare la distinzione tra maiuscole e minuscole aggiungendo .ignoresCase() a un valore regex, utile quando la combinazione di maiuscole e minuscole dell'input non è prevedibile.

let pattern = /swift/.ignoresCase()
print("I love SWIFT".contains(pattern))

Cercare corrispondenze con matches(of:)

matches(of:) restituisce una raccolta di tutte le corrispondenze non sovrapposte nella stringa, consentendo di iterare su ciascuna di esse.

let nums = "a1 b22 c333"
for m in nums.matches(of: /\d+/) {
    print(m.output)
}

Convalidare l'input

Un uso comune è la convalida: costruisca un pattern per il formato completo previsto e verifichi con wholeMatch, che restituisce nil quando non c'è corrispondenza.

func isZip(_ s: String) -> Bool {
    s.wholeMatch(of: /\d{5}/) != nil
}
print(isZip("90210"))
print(isZip("ABCDE"))

Verifica rapida

Quale metodo ha successo solo quando l'intera stringa corrisponde?

Riepilogo

Ha imparato a scrivere literal regex tra barre e a cercare corrispondenze usando wholeMatch(of:), firstMatch(of:) e matches(of:). Ha inoltre visto le classi di caratteri, i quantificatori, le ancore e la ricerca senza distinzione tra maiuscole e minuscole. Successivamente estrarrà i dati dalle corrispondenze con i gruppi di cattura.

Domande Frequenti

La lezione «Letterali regex e pattern matching» è gratuita?

Sì — il testo completo di «Letterali regex e pattern matching» è 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 «Letterali regex e pattern matching»?

Confronti i pattern con il tipo Regex. 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 1 di 4.

Quanto tempo richiede la lezione «Letterali regex e pattern matching»?

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