J'ai trouvé cet 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 des mentions de manger l'ensemble de la chaîne d'entrée, des lettres d'été consommé, comparateur de sauvegarde, de droite 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 les 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 bien 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ée (par qui?). Ainsi, le matcher lentement s'éloigne (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 consommer (par qui?) "rien". Parce que "foo" n'apparaît pas au début de la chaîne, il est forcé d'avaler (qui avale?) 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é .*+, (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 la sauvegarde (ce qui n'back off veux dire?); il sera mieux l'équivalent gourmand quantificateur dans les cas où le match n'est pas immédiatement trouvé.