Ruby ha un rapporto splendido con le stringhe e le espressioni regolari: sono integrate nel linguaggio, non una libreria a parte.

testo = "Contattami: ale@mail.it oppure info@site.com"

# estrarre tutte le email
testo.scan(/[\w.]+@[\w.]+/)
# => ["ale@mail.it", "info@site.com"]

# sostituire con un blocco
"prezzo: 100 euro".gsub(/\d+/) { |n| (n.to_i * 1.1).round.to_s }
# => "prezzo: 110 euro"

# slug da un titolo
"Il Mio Post!".downcase.gsub(/[^a-z0-9]+/, "-").chomp("-")
# => "il-mio-post"

gsub sostituisce tutte le occorrenze e accetta un blocco per trasformazioni dinamiche; scan raccoglie tutti i match in un array; match e =~ verificano la presenza di un pattern.

I gruppi di cattura tornano comodi: "2026-07-07".match(/(\d+)-(\d+)-(\d+)/) ti dà anno, mese e giorno separati. Con una manciata di metodi domini qualsiasi elaborazione di testo: parsing, pulizia, validazione, generazione di slug.