Может ли кто-нибудь объяснить мне Потенциальные Квантеры? (Обычные выражения)

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

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

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

Ответ 1

Возможно, лучшим местом для начала является Учебное пособие по регулярному выражению - Possessive Quantifiers:

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


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