Expresii Regulare și Pattern Matching Modern în Ruby în Ruby

Ghid complet pentru expresii regulare și pattern matching în Ruby 3: operatorul =~, capturi nominale, metoda match, și construcțiile case ... in pentru structuri de date complexe.

Sintaxă
text =~ /regex/; case val in [x, y] then ... in {name:} then ... end

Ruby dispune de un suport nativ de excepție pentru expresii regulare prin clasa Regexp. Începând cu Ruby 3.0, limbajul a adăugat Pattern Matching structural (instrucțiunea case ... in), transformând modul în care descompunem obiecte și hash-uri.

Expresii regulare cu capturi nominale (Named Captures)
text = "Comanda #9842 a fost plasata de utilizatorul ion@dexblog.ro la ora 14:30."

# Regex cu grupuri nominale (?pattern):
pattern = /#(?\d+).*?(?[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/

if (potrivire = pattern.match(text))
    puts "ID Comandă găsit: #{potrivire[:id_comanda]}"
    puts "Email client: #{potrivire[:email]}"
end

# Scanare pentru toate numerele dintr-un text:
preturi = "Pâine: 6 RON, Lapte: 12 RON, Cafea: 35 RON".scan(/\d+/)
puts "Toate prețurile: #{preturi.inspect}" # ["6", "12", "35"]
Pattern Matching structural modern cu case … in
raspuns_api = { status: 200, corp: { utilizator: "Mihai", puncte: 450 } }

# Destructurare elegantă pe baza structurii datelor:
case raspuns_api
in { status: 200, corp: { utilizator: nume, puncte: punctaj } }
    puts "Autentificat cu succes: #{nume} cu #{punctaj} puncte."
in { status: 404, corp: mesaj }
    puts "Resursa nu a fost găsită: #{mesaj}"
in { status: 500..599 }
    puts "Eroare internă de server!"
else
    puts "Răspuns necunoscut."
end