Recherche…


Remarques

NB Émulation des quantificateurs possessifs

Utilisation de base des quantificateurs possessifs

Les quantificateurs possessifs sont une autre classe de quantificateurs dans de nombreuses variantes de regex qui permettent de désactiver efficacement le retour en arrière pour un jeton donné. Cela peut aider à améliorer les performances, tout en empêchant les correspondances dans certains cas.

La classe des quantificateurs possessifs peut être distinguée des quantificateurs paresseux ou gourmands par l'ajout d'un + après le quantificateur, comme indiqué ci-dessous:

Quantificateur Glouton Paresseux Possessif
Zéro ou plus * *? *+
Un ou plus + +? ++
Zéro ou un ? ?? ?+

Considérons, par exemple, les deux modèles ".*" Et ".*+" , Agissant sur la chaîne "abc"d . Dans les deux cas, le " au début de la chaîne correspond, mais après cela, les deux modèles auront des comportements et des résultats différents.

Le quantificateur gourmand va alors slurp le reste de la chaîne, abc"d . Parce que cela ne correspond pas au modèle, il va alors revenir en arrière et supprimer le d , en laissant le quantificateur contenant abc" . Étant donné que cela ne correspond toujours pas au modèle, le quantificateur supprimera le " , ne contenant que l' abc . Cela correspond au modèle (car le " correspond à un littéral plutôt qu'au quantificateur), et l'expression rationnelle indique un succès.

Le quantificateur possessif slurp également le reste de la chaîne, mais contrairement au quantificateur gourmand, il ne fera pas marche arrière. Étant donné que son contenu, abc"d , ne permet pas le reste du motif de la correspondance, le regex s'arrêtera et signalera l'échec de la correspondance.

Étant donné que les quantificateurs possessifs ne font pas de retour en arrière, ils peuvent entraîner une augmentation significative des performances sur les modèles longs ou complexes. Ils peuvent cependant être dangereux (comme illustré ci-dessus) si l’on ne sait pas exactement comment fonctionnent les quantificateurs en interne.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow