L'espressione regolare e.+?d
corrisponde a un 'e'
e poi cerca di far corrispondere il minor numero di caratteri possibile (ungreedy o riluttanti), seguito da un 'd'
. È per questo che i seguenti 2 sottostringhe sono abbinati:
extend cup end table
^^^^^^ ^^^
1 2
L'espressione regolare e.+d
corrisponde a un 'e'
e poi cerca di far corrispondere il più personaggi possibile (avidi), seguito da un 'd'
. Quello che succede è che il primo 'e'
è trovato, e poi i .+
partite tanto quanto può (fino alla fine della linea, o ingresso):
extend cup end table
^^^^^^^^^^^^^^^^^^^^
Il motore regex arriva alla fine della riga (o input) e non possono corrispondere allo 'd'
nel modello regex. Quindi torna indietro fino all'ultimo 'd'
è visto. Questo è il motivo per cui viene trovata la corrispondenza singola:
extend cup end table
^^^^^^^^^^^^^^<----- backtrack
1
fonte
2013-01-08 11:33:32
Come indicato di seguito, è la differenza tra quantificatori avidi e pigri. Avido vuole consumare il più possibile, pigro il meno possibile. Il motore "costruisce la stringa" carattere per carattere, da sinistra a destra, quando il quantificatore è pigro. Greedy farà il contrario.Consumerà il più possibile e quindi lascerà cadere alcuni caratteri, da destra a sinistra, se necessario. Guarda i seguenti esempi: http://regex101.com/r/dG9zZ2 e http://regex101.com/r/tP5xQ3 –