Szukaj…


Uwagi

NB Emulowanie kwantyfikatorów dzierżawczych

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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow