0Pricing
Ruby Academy · Lezione

Corrispondenza e cattura

match e catture

Corrispondenza e cattura è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 2 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 Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.

Oggetti MatchData

Quando si chiama regex.match(string), Ruby restituisce un oggetto MatchData in caso di successo oppure nil in caso di errore.

MatchData contiene il testo corrispondente e gli eventuali gruppi catturati.

m = /world/.match('hello world')
puts m.class
puts(m[0])

La corrispondenza completa: indice 0

L'indice 0 di un MatchData contiene sempre la sottostringa corrispondente completa, indipendentemente dai gruppi presenti.

m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)

Gruppi di cattura

Le parentesi ( ) creano gruppi di cattura. È possibile accedere a ogni gruppo tramite il relativo numero, a partire da 1.

m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])

Il metodo captures

captures restituisce un array di tutti i gruppi catturati, escludendo la corrispondenza completa all'indice 0.

m = /(\w+)@(\w+)/.match('alice@example')
p m.captures

Destrutturare le catture

Poiché captures restituisce un array, è possibile destrutturare direttamente il risultato in variabili.

user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts host

Corrispondenza precedente e successiva

MatchData offre metodi di supporto per il testo intorno alla corrispondenza:

  • pre_match la parte precedente
  • post_match la parte successiva
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)

scan per tutte le corrispondenze

String#scan restituisce un array di tutte le corrispondenze presenti nella stringa, non soltanto della prima.

nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p nums

scan con i gruppi

Se il modello contiene gruppi, scan restituisce un array di array, uno per ogni corrispondenza, ciascuno contenente le catture di quella corrispondenza.

pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairs

Gestire nil in modo sicuro

È importante ricordare che match restituisce nil quando non viene trovata alcuna corrispondenza. È necessario verificarlo prima di usare il risultato.

m = /(\d+)/.match('no digits here')
if m
  puts m[1]
else
  puts 'no match found'
end

Variabili speciali

Dopo una corrispondenza riuscita, Ruby imposta variabili globali: $~ contiene il MatchData, mentre $1 e $2 contengono le catture numerate.

Sono utili negli script brevi, ma nel codice reale MatchData esplicito è più chiaro.

if 'name: Alice' =~ /name: (\w+)/
  puts $1
end

Estrarre una data

È possibile combinare gruppi e catture per estrarre dati strutturati da una stringa in un unico passaggio.

year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"

Verifica rapida

Dato 'a=1 b=2'.scan(/(\w)=(\d)/), quale forma ha il risultato?

Riepilogo: corrispondenza e cattura

Ora è possibile estrarre dati dalle corrispondenze:

  • match restituisce MatchData o nil
  • L'indice 0 contiene la corrispondenza completa, gli indici da 1 in poi i gruppi
  • captures restituisce tutti i gruppi in un array
  • scan trova tutte le corrispondenze nella stringa
  • È sempre necessario gestire nil
p 'x1 y2 z3'.scan(/([a-z])(\d)/)

Domande Frequenti

La lezione «Corrispondenza e cattura» è gratuita?

Sì — il testo completo di «Corrispondenza e cattura» è 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 Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.

Cosa imparerò in «Corrispondenza e cattura»?

match e catture Eserciti Ruby 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 Ruby Academy?

Non è richiesta alcuna esperienza precedente. Ruby 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 2 di 4.

Quanto tempo richiede la lezione «Corrispondenza e cattura»?

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 Ruby Academy?

Sì. Ogni lezione Ruby 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. Literals delle espressioni regolari
  2. Corrispondenza e cattura
  3. Sostituzione
  4. Gruppi denominati e ancoraggi
← Torna a Ruby Academy