Sök…


Anmärkningar

OBS: Emulering av förmånliga kvantifierare

Grundläggande användning av möjliga kvantifierare

Eventuella kvantifierare är en annan klass av kvantifierare i många regex-smaker som tillåter backtracking för att effektivt kunna inaktiveras för ett visst symbol. Detta kan hjälpa till att förbättra prestandan och förhindra matchningar i vissa fall.

Klassen för innehållande kvantifierare kan skiljas från lata eller giriga kvantifierare genom tillsats av en + efter kvantifieraren, som ses nedan:

kvantifierare Girig Lat Possessiv
Noll eller mer * *? *+
En eller flera + +? ++
Noll eller en ? ?? ?+

Tänk till exempel på de två mönstren ".*" Och ".*+" Och arbetar på strängen "abc"d . I båda fallen matchas " i början av strängen, men efter det kommer de två mönstren att ha olika beteenden och resultat.

Den giriga kvantifieraren slurper sedan resten av strängen, abc"d . Eftersom detta inte stämmer överens med mönstret, kommer det sedan att spåra tillbaka och släppa d , vilket lämnar kvantifieraren som innehåller abc" . Eftersom detta fortfarande inte stämmer överens med mönstret, kommer kvantifieraren att släppa " och lämnar det bara abc . Detta matchar mönstret (eftersom " matchas av en bokstavlig, snarare än kvantifieraren), och regex rapporterar framgång.

Den besittande kvantifieraren slurper också resten av strängen, men till skillnad från den giriga kvantifieraren kommer den inte att spåra. Eftersom dess innehåll, abc"d , inte tillåter resten av matchen av matchen, kommer regexen att stoppa och rapportera misslyckande att matcha.

Eftersom de besittande kvantifierarna inte gör backtracking kan de resultera i en betydande prestationsökning på långa eller komplexa mönster. De kan emellertid vara farliga (som illustreras ovan) om man inte är medveten om hur kvantifierare exakt fungerar internt.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow