Abbiamo appena trovato un bug in qualche codice in cui il programmatore aveva usato l'equivalente di (.)+
quando avrebbero dovuto usare (.+)
. Una soluzione abbastanza semplice, ma non siamo in grado di spiegare il comportamento di (.)+
. Qualcuno può spiegare perché questo corrisponde a "e", l'ultima lettera, e non "b", la prima lettera dopo "a" nella regex? Come spiegheresti (.)+
?qual è il comportamento di (.) + In un'espressione regolare?
my $s = 'abcde';
if ($s =~ m{ a (.)+ }x){
print "s '$s' matched '$1'\n";
}else{
print "total match fail\n";
}
__END__
output:
s 'abcde' matched 'e'
Credo che la ragione di questo sia perché continua a corrispondere fino a quando non riesce a corrispondere al modello. A quel punto è l'ultimo carattere abbinato presente nel gruppo di cattura. –
Prova ad aggiungere 'use re 'debug';' all'inizio del tuo codice. Questo è utile per tenere traccia di ciò che sta accadendo. – Sobrique
Mi piace la spiegazione in [Ripetizione di un gruppo di acquisizione rispetto alla cattura di un gruppo ripetuto] (http://www.regular-expressions.info/captureall.html). – ThisSuitIsBlackNot