Regular Expressions
Bezittelijke kwantificeringen
Zoeken…
Opmerkingen
Basisgebruik van bezittelijke kwantificeringen
Bezittelijke kwantificatoren zijn een andere klasse van kwantificatoren in veel regex-smaken waarmee backtracking effectief voor een bepaald token kan worden uitgeschakeld. Dit kan de prestaties verbeteren en in bepaalde gevallen wedstrijden voorkomen.
De klasse van bezittelijke kwantificatoren kan worden onderscheiden van luie of hebzuchtige kwantificatoren door de toevoeging van een +
na de kwantificeerder, zoals hieronder te zien:
quantifier | gulzig | Lui | bezittelijk |
---|---|---|---|
Nul of meer | * | *? | *+ |
Een of meer | + | +? | ++ |
Nul of één | ? | ?? | ?+ |
Beschouw bijvoorbeeld de twee patronen ".*"
En ".*+"
, Die werken op de string "abc"d
. In beide gevallen komt het "
aan het begin van de string overeen, maar daarna zullen de twee patronen verschillend gedrag en resultaten hebben.
De hebzuchtige kwantificeerder zal dan de rest van de string slurpen, abc"d
. Omdat dit niet overeenkomt met het patroon, zal het dan de d
en de kwantificator met abc"
. Omdat dit nog steeds niet overeenkomt met het patroon, laat de kwantificeerder de "
, waardoor deze alleen abc
. Dit komt overeen met het patroon (omdat de "
overeenkomt met een letterlijke letter in plaats van de kwantificeerder), en de regex rapporteert succes.
De bezitterige kwantificeerder zal ook de rest van de string slurpen, maar in tegenstelling tot de hebzuchtige kwantificeerder zal hij niet teruggaan. Omdat de inhoud ervan, abc"d
, de rest van het patroon van de wedstrijd niet toestaat, stopt de regex en meldt het mislukken.
Omdat de bezittelijke kwantificatoren geen backtracking uitvoeren, kunnen ze resulteren in een aanzienlijke prestatieverhoging van lange of complexe patronen. Ze kunnen echter gevaarlijk zijn (zoals hierboven geïllustreerd) als men niet weet hoe kwantificatoren precies intern werken.