Regular Expressions
Eventuella kvantifierare
Sök…
Anmärkningar
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.