Regular Expressions
Kwantyfikatory dzierżawcze
Szukaj…
Uwagi
Podstawowe zastosowanie kwantyfikatorów dzierżawczych
Kwantyfikatory dzierżawcze to kolejna klasa kwantyfikatorów w wielu odmianach wyrażeń regularnych, które umożliwiają skuteczne cofanie śledzenia dla danego tokena. Może to pomóc poprawić wydajność, a także w niektórych przypadkach zapobiec dopasowaniom.
Klasę kwantyfikatorów dzierżawczych można odróżnić od kwantyfikatorów leniwych lub zachłannych przez dodanie znaku +
za kwantyfikatorem, jak pokazano poniżej:
Kwantyfikator | Chciwy | Leniwy | Zaborczy |
---|---|---|---|
Zero lub więcej | * | *? | *+ |
Jeden lub więcej | + | +? | ++ |
Zero lub jeden | ? | ?? | ?+ |
Rozważmy na przykład dwa wzorce ".*"
I ".*+"
, Działające na ciągu "abc"d
. W obu przypadkach znak "
na początku ciągu znaków jest dopasowany, ale później oba wzorce będą miały różne zachowania i wyniki.
Chciwy kwantyfikator będzie wtedy slurpował resztę ciągu, abc"d
. Ponieważ to nie pasuje do wzorca, następnie cofnie się i upuści d
, pozostawiając kwantyfikator zawierający abc"
. Ponieważ to wciąż nie pasuje do wzorca, kwantyfikator upuści "
, pozostawiając w nim tylko abc
. To pasuje do wzorca (ponieważ "
jest dopasowywany dosłownie, a nie przez kwantyfikator), a wyrażenie regularne zgłasza sukces.
Kwantyfikator dzierżawczy będzie również slurował resztę ciągu, ale w przeciwieństwie do chciwego kwantyfikatora nie będzie się cofał. Ponieważ jego zawartość, abc"d
, nie pozwala na resztę wzorca dopasowania, wyrażenie regularne zatrzyma się i zgłosi niepowodzenie dopasowania.
Ponieważ kwantyfikatory dzierżawcze nie wykonują śledzenia wstecznego, mogą powodować znaczny wzrost wydajności w przypadku długich lub złożonych wzorców. Mogą być jednak niebezpieczne (jak pokazano powyżej), jeśli nie wiadomo, jak dokładnie kwantyfikatory działają wewnętrznie.