[ruby-it] Confronto usando regexp
gabriele renzi
surrender_it a yahoo.it
Sab 7 Mar 2009 20:59:43 CET
> From: Stefano De nigris <stedenigris a hotmail.com>
> To: ml a lists.ruby-it.org
> Sent: Saturday, 7 March, 2009 18:40:40
> Subject: [ruby-it] Confronto usando regexp
>
> Ciao ragazzi,io ho un problema che non so come risolverlo.Ho una
> variabile che è di tipo globale --> $varrecord,alla quale è assegnata
> una parola (qualcuno è la parola).Vorrei creare un if che funzioni
> quando il confronto tra la parola e una espressione è giusta,mi spiego
> meglio con un esempio:
è più facile se pensi un passo per volta :)
Hai $varrecord che è una stringa e vorresti che fosse una expressione regolare.
Quello che vuoi quindi è creare una *nuova Regexp* :)
>> var="123"
=> "123"
>> rgx= Regexp.new(var)
=> /123/
>> rgx.match("123")
=> #<MatchData "123">
Oppure, usando l'interpolazione come fai per le stringhe
>> /#{var}/ =~ "123"
=>0
che significa "match allo zeresimo carattere"
Attenzione però, che se fai in questo modo il valore della variabile è considerato come se fosse scritto nel codice:
>> var= "..."
=> "..."
>> /#{var}/ =~ "123"
=> 0
il pounto è il metacarattere che matcha qualsiasi cosa quindi matcha 1,2 e 3.
Se tu invece avessi voluto che il punto fosse considerato letteralmente come il carattere punto avresti dovuto "quotarlo"
>> rgx= Regexp.new(var)
=> /.../
metacaratteri
>> rgx= Regexp.new(Regexp.quote(var))
=> /\.\.\./
letterali
>> rgx =~ "123"
=> nil
>> rgx =~ "..."
=> 0
E puoi usare il quoting anche dentro l'interpolazione
>> /#{Regexp.quote var}/ =~ "..."
=> 0
>> /#{Regexp.quote var}/ =~ "123"
=> nil
_puoi_ anche usare eval, ma è sempre meglio evitarlo finché possibile (ed in generale, è pure meglio evitare le variabili globali)
More information about the Ml
mailing list