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

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

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

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

1 Ответ

12 голосов
/ 13 июля 2009

Возможно, лучше всего начать с Regex Tutorial - Possessive Quantifiers :

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


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

...