Trovare Parole Ripetute
Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina
Trovare Parole Ripetute
Anche questo e’ semplice se usiamo le Regexp.
Anzitutto dobbiamo sapere come individuare una parola.
Il procedimento e’ leggermente differente da quello per individuare una semplice stringa. Infatti, abbiamo bisogno di usare il metacarattere “\b” per indicare, l’inizio e la fine di una parola.
Fate attenzione a non confondere questo concetto con i simboli “^” e “$” che invece indicano l’inizio e la fine di una riga
Esempio: >> rgx=/\bvia\b/ => /\bvia\b/ >> ‘via’=rgx => 1 >> ‘ferrovia’=rgx => nil
Abbiamo imparato un trucco interessante. Ricordate che esiste anche un opposto di “\b” , cioe’ “\B” , che indica un non word boundary, un punto in cui non c’e un limite della parola.
Ora, passiamo alle backreference. In pratica, questi simboli ci permettono dire “uno dei simboli gia’ trovati”. Ad esempio: >> rgx=/(.)\1/ # matcha ogni carattere, e poi lo stesso => /(.)\1/ >> “ab” =~ rgx => nil >> “aa” =~ rgx => 0 >> “x1x” =~ rgx => nil >> “x11x” =~ rgx => 1
In pratica scriverete un “\” e poi un numero che indica a quale gruppo si fa riferimento (in questo caso il primo).
Vediamo un esempio piu’ complicato:
>> rgx=/(pi|po)\1/
=> /(pi|po)\1/
>> “pipi” =~ rgx
=> 0
>> “popi” =~ rgx
=> nil
>> “popo” =~ rgx
=> 0
Ovviamente potete usare anche “\2 \3 \4 \n”.
A questo punto la nostra espressione regolare e’ semplice:
rgx=/(\b\w+\b)\s+\1/ => /(\b\w+\b)\s+\1/ “io vado a scuola” =~ rgx => nil “io vado a a scuola” =~ rgx => 8 “io vado a scuola scuola” =~ rgx => 10