Zoeken…


Opmerkingen

NB Bezitterige kwantificeringen emuleren

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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow