la sequenza diventa massima dal momento che “*” e’ greedy, piglia cioe’
tutto!
Ho visto la pagina di programming ruby dove si parla di questo ma non
l’ho capito
la sequenza diventa massima dal momento che “*” e’ greedy, piglia cioe’
tutto!
Ho visto la pagina di programming ruby dove si parla di questo ma non
l’ho capito
On 4/4/07, Mauro S. [email protected] wrote:
la sequenza diventa massima dal momento che “*” e’ greedy, piglia cioe’
tutto!Ho visto la pagina di programming ruby dove si parla di questo ma non
l’ho capito
La faccenda del greedy e non greedy è un po’ da magia nera. Se ho
un’espressione regolare /.*/ la sequenza più piccola che matcha è la
stringa vuota.
Una maniera più ortodossa di fare la stessa cosa, se ad esempio vuoi
matchare
aaa [email protected] bbb [email protected] ccc
e estrarre i due indirizzi email, è di usare al posto di .* questa
espressione: [^>]* che matcha fino a quando non trova un “maggiore”.
Per tornare al tuo problema: se il tuo problema è trovare tutte le
righe che contengono “Passed” ed estrarre i due indirizzi e farci
qualcosa, io farei
così:
IO.foreach(“mail.log”) do |line|
if line =~ /Passed.<([^>])>.<([^>])>/
primo_indirizzo = $1
secondo_indirizzo = $2
process primo_indirizzo, secondo_indirizzo
end
end
o anche
IO.foreach(“mail.log”) do |line|
process($1, $2) if line =~ /Passed.<([^>])>.<([^>])>/
end
E’ più elegante sì o no?
M
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs