regex e.+?d
dopasowuje 'e'
a następnie stara się dopasować jak kilka znaków, jak to możliwe (ungreedy lub niechętnie), a następnie przez 'd'
. Dlatego poniższe 2 podciągi są dopasowane:
extend cup end table
^^^^^^ ^^^
1 2
regex e.+d
dopasowuje 'e'
a następnie próbuje dopasować tyle znaków, jak to możliwe (chciwy), a następnie przez 'd'
. Co się dzieje, jest to, że pierwszy 'e'
zostanie znaleziony, a następnie .+
mecze jak to możliwe (do końca linii, lub wejście):
extend cup end table
^^^^^^^^^^^^^^^^^^^^
Silnik regex dochodzi do końca wiersza (lub wejście) i nie może dopasować 'd'
do wzorca regex. W ten sposób następuje powrót do ostatniej 'd'
piły. Dlatego znaleziono pojedynczy mecz:
extend cup end table
^^^^^^^^^^^^^^<----- backtrack
1
Jak wspomniano poniżej, różnica między chciwymi a leniwymi kwantyfikatorami. Chciwy chcą konsumować jak najwięcej, leniwy jak najmniej. Silnik będzie "budował ciąg" znaków po znaku, od lewej do prawej, kiedy kwantyfikator jest leniwy. Chciwy zrobi coś przeciwnego.Spowoduje to zużycie w miarę możliwości, a następnie upuszczenie kilku znaków, od prawej do lewej, jeśli zajdzie taka potrzeba. Zobacz następujące przykłady: http://regex101.com/r/dG9zZ2 i http://regex101.com/r/tP5xQ3 –