Может ли кто-нибудь объяснить мне Притяжательные квантификаторы? (Регулярные выражения)
Я читаю документ PCRE, и он ссылается на собственнические квантификаторы, но не определяет их явно или конкретно. Я знаю, что такое жадный квантификатор, и я знаю, что такое ленивый квантификатор. Но притяжательный?
Справочная страница PCRE, кажется, обманывает, когда использует термин, не определяя его. В справочной странице определенно указывается, что термин " притяжательные квантификаторы" был впервые определен в книге Фридла. Что ж, это замечательно, но у меня нет книги Фридла, и, читая справочную страницу, между строк я не могу понять, что отличает собственнические квантификаторы от жадных.
- ? = ноль или один, жадный
- ?? = ноль или один, ленивый
- ?+ = ноль или один, притяжательный
- '+' = один или несколько, жадный
- +? = один или несколько, ленивый
- ++ = один или несколько притяжательных
1 ответ
Пожалуй, лучшее место для начала - Regex Tutorial - Possessive Quantifiers:
При обсуждении операторов или квантификаторов повторения я объяснил разницу между жадным и ленивым повторением. Жадность и лень определяют порядок, в котором механизм регулярных выражений пробует возможные перестановки шаблона регулярных выражений. Жадный квантификатор сначала попытается повторить токен столько раз, сколько возможно, и постепенно откажется от совпадений, когда двигатель возвращается, чтобы найти общее совпадение. Ленивый квантификатор сначала будет повторять токен столько раз, сколько потребуется, и постепенно расширяет совпадение, когда двигатель возвращается через регулярное выражение, чтобы найти общее совпадение.
Притяжательные квантификаторы - это способ помешать движку регулярных выражений попробовать все перестановки. Это в первую очередь полезно по соображениям производительности. Вы также можете использовать собственнические квантификаторы для устранения определенных совпадений.