Cercare una Stringa in un'altra

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Questo e’ il compito per cui sono state inventate le espressioni regolari, o Regexp. Usare le Regexp e’ semplice, ma puo’ diventare molto complicato se si usano le loro caratteristiche piu’ potenti.

Le espressioni regolari sono un argomento molto complesso, non sono completamente spiegate in questa pagina. Il nostro scopo e’ solo di individuare delle sottostringhe.

In generale, una regexp si crea in questo modo:
 >> rgx= /espressione/
 => /espressione/
o usando esplicitamente il costruttore della classe Regexp:
 >> rgx= Regexp.new "espressione" 
 => /espressione/
per verificare che una stringa sia contenuta in un altra si puo’ usare l’operatore =~:
 >> 'la mia espressione' =~ rgx
 => 7
 >> 'bau' =~ rgx
 => nil
Come vedete, l’operatore restituisce l’indice della stringa dove ha inizio l’espressione rappresentata dalla Regexp, oppure nil. Dunque possiamo scrivere cose del genere:
 >> if 'ciao'=~ /a/
 >>  p 'trovata una a'
 >> end
Possiamo usare le Regexp anche in un modo piu’ “ad oggetti”:
 >> /a/.match 'ciao'
 => #<MatchData:0x27c9b90>
 >> /a/.match 'cio'
 => nil
Quel MatchData e’ un oggetto speciale, che contiene al suo interno i valori trovati dal’espressione. Se non viene trovato nulla, appare un nil, di nuovo, quindi vale la considerazione fatta prima. ancora sui confronti: le Regexp posseggono anche un operatore === che viene usato nei confronti case:
 >> case 'ciao'
 >>  when /k/
 >>   puts 'trovata k'
 >>  when /z/
 >>   puts 'trovata z'
 >>  when /a/
 >>   puts 'trovata a'
 >> end
 trovata a
 => nil
Updated on November 25, 2005 13:56 by Ruby Fan (127.0.0.1)