2009-07-13 10 views
11

Je lis le document PCRE, et il fait référence à quantificateurs possessive, mais ne les définit pas explicitement ou spécifiquement. Je sais ce qu'est un quantificateur gourmand, et je sais ce qu'est un quantificateur paresseux. Mais possessif? Le PCRE man page semble tricher lorsqu'il utilise le terme sans le définir. La page de manuel indique spécifiquement que le terme quantificateurs possessive a été défini en premier dans Friedl's book. Eh bien, c'est génial, mais je n'ai pas le livre de Friedl, et en lisant la page man, entre les lignes, je n'arrive pas à comprendre ce qui distingue les quantificateurs possessifs des gourmands.Quelqu'un peut-il m'expliquer les Quantifiants Possessive? (Expressions régulières)

  • ? = zéro ou un, gourmand
  • ?? = Zéro ou un, paresseux
  • ? + = Zéro ou un, possessive
  • '+' = un ou plusieurs, avide
  • +? = Un ou plusieurs, paresseux
  • ++ = un ou plusieurs, possessive
+0

Cette question a été ajoutée à la [Stack Overflow Expression régulière FAQ] (http://stackoverflow.com/a/22944075/2736496), sous la rubrique "quantificateurs> En savoir plus sur les différences ..." – aliteralmind

Répondre

11

Peut-être le meilleur endroit pour commencer est Regex Tutorial - Possessive Quantifiers:

En discutant la répétition opérateurs ou quantificateurs, je l'ai expliqué la différence entre la répétition gourmande et paresseuse . Avidité et paresse déterminer l'ordre dans lequel le moteur regex essaie les permutations possibles du motif regex. Un quantificateur gourmand va d'abord essayer de répéter le jeton autant de fois que possible, et abandonner progressivement les correspondances comme les backtracks moteur pour trouver un match global . Un quantificateur paresseux commencera par répéter le jeton aussi peu que requis, et étendra graduellement le match en tant que backtracks du moteur en passant par la regex pour trouver une correspondance globale.


quantificateurs possessifs sont un moyen d'empêcher le moteur de regex de essayer toutes les permutations. Ceci est principalement utile pour les raisons de performance. Vous pouvez également utiliser des quantificateurs possessifs pour éliminer certaines correspondances .

+8

Ahh, Je vois! Après avoir lu ce tutoriel, il me semble que la paresse n'est pas le contraire du gourmand. La paresse devrait être appelée «généreuse» peut-être, et la forme possessive devrait être appelée paresseuse, parce que les quantificateurs possessifs refusent de faire marche arrière. Ils ne feront pas de travail supplémentaire, qui est juste paresseux paresseux. – Cheeso

+4

quantificateurs possessifs refusent de revenir en arrière - c'est la meilleure explication que j'ai lu à ce sujet. merci de le résumer :) – vondip