Может ли кто-нибудь объяснить мне Притяжательные квантификаторы? (Регулярные выражения)

Я читаю документ PCRE, и он ссылается на собственнические квантификаторы, но не определяет их явно или конкретно. Я знаю, что такое жадный квантификатор, и я знаю, что такое ленивый квантификатор. Но притяжательный?

Справочная страница PCRE, кажется, обманывает, когда использует термин, не определяя его. В справочной странице определенно указывается, что термин " притяжательные квантификаторы" был впервые определен в книге Фридла. Что ж, это замечательно, но у меня нет книги Фридла, и, читая справочную страницу, между строк я не могу понять, что отличает собственнические квантификаторы от жадных.

  • ? = ноль или один, жадный
  • ?? = ноль или один, ленивый
  • ?+ = ноль или один, притяжательный
  • '+' = один или несколько, жадный
  • +? = один или несколько, ленивый
  • ++ = один или несколько притяжательных

1 ответ

Решение

Пожалуй, лучшее место для начала - Regex Tutorial - Possessive Quantifiers:

При обсуждении операторов или квантификаторов повторения я объяснил разницу между жадным и ленивым повторением. Жадность и лень определяют порядок, в котором механизм регулярных выражений пробует возможные перестановки шаблона регулярных выражений. Жадный квантификатор сначала попытается повторить токен столько раз, сколько возможно, и постепенно откажется от совпадений, когда двигатель возвращается, чтобы найти общее совпадение. Ленивый квантификатор сначала будет повторять токен столько раз, сколько потребуется, и постепенно расширяет совпадение, когда двигатель возвращается через регулярное выражение, чтобы найти общее совпадение.


Притяжательные квантификаторы - это способ помешать движку регулярных выражений попробовать все перестановки. Это в первую очередь полезно по соображениям производительности. Вы также можете использовать собственнические квантификаторы для устранения определенных совпадений.

Другие вопросы по тегам