Ricerca testo

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 :frowning:

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 :frowning:

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? :slight_smile:

M