Gourmand vs Réticents vs Possessif Quantificateurs

J'ai trouvé ce excellent tutoriel sur les expressions régulières et alors que je intuitivement comprendre ce qu'est "gourmand", "réticents" et "possessif" quantificateurs faire, il semble y avoir un sérieux trou dans ma compréhension.

Plus précisément, dans l'exemple suivant:

Enter your regex: .*foo  //greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.

Enter your regex: .*?foo  //reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.

Enter your regex: .*+foo //possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.

L'explication mentionne manger l'ensemble de la chaîne d'entrée, des lettres d'été consommé, comparateur de la sauvegarde, plus à droite de l'occurrence de "foo" a été régurgité, etc.

Malheureusement, en dépit de la belle métaphores, je ne comprends toujours pas ce qui est mangé par qui... connaissez-vous un autre tutoriel qui explique (de façon concise) comment expressions régulières fonctionnent les moteurs?

Sinon, si quelqu'un peut expliquer un peu différent du phrasé, de l'alinéa suivant, qui serait très apprécié:

Le premier exemple utilise le gourmand
quantificateur .* afin de trouver "quelque chose", zéro
ou plusieurs fois, suivi par les lettres
"f" "o" "o". Parce que le quantificateur est
gourmand, le .* partie de la
d'abord l'expression mange l'ensemble de l'entrée
chaîne de caractères. À ce stade, l'ensemble de la
l'expression ne peut pas réussir, parce que le
trois dernières lettres ("f" "o" "o") ont
déjà été consommés (par qui?). Ainsi, le matcher
lentement sauvegarde (de droite à gauche?) une lettre à la fois
jusqu'à l'apparition de l'extrême droite
"foo" a été régurgité (qu'est-ce que cela signifie?), à qui
point du match réussit et le
la recherche se termine.

Le deuxième exemple, cependant, est
réticent, il commence d'abord par
longue (par qui?) "rien". Parce que "foo"
n'apparaît pas au début de la
chaîne, il est forcé d'avaler (qui hirondelles?) l'
première lettre (un "x"), qui déclenche
le premier match à 0 et 4. Notre test
harnais continue le processus jusqu'à ce que
la chaîne d'entrée est épuisé. Il
trouve un autre match à 4 et 13.

Le troisième exemple, ne parvient pas à trouver un
match parce que le quantificateur est
possessif. Dans ce cas, l'ensemble de la
chaîne d'entrée est consommée par l' .*+, (comment?)
ne laissant rien pour satisfaire
le "toto" à la fin de la
de l'expression. Utiliser un possessif
quantificateur pour les situations où vous
voulez vous emparer de tous quelque chose sans
jamais reculer (ce n'back off signifie?); il sera mieux
l'équivalent gourmand quantificateur dans
les cas où le match n'est pas
immédiatement trouvé.

  • Maximale des quantificateurs comme *, +, et ? sont gourmand. un Minimum de quantificateurs comme *?, +?, et ?? sont paresseux. Possessif des quantificateurs comme *+, ++, et ?+ sont collant.
  • Cette question a été ajoutée à la Débordement de Pile dans l'Expression Régulière de la FAQ, sous "Quantificateurs > en savoir Plus sur les différences...".
InformationsquelleAutor Regex Rookie | 2011-03-16