Я знайшов цей чудовий підручник щодо регулярних виразів, і хоча я інтуїтивно розумію, що роблять "жадібні", "неохотні" та "прихильні" квантори, здається, що в моєму розумінні є серйозна дірка.
Зокрема, у наступному прикладі:
Enter your regex: .*foo // greedy quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfooxxxxxxfoo" starting at index 0 and ending at index 13.
Enter your regex: .*?foo // reluctant quantifier
Enter input string to search: xfooxxxxxxfoo
I found the text "xfoo" starting at index 0 and ending at index 4.
I found the text "xxxxxxfoo" starting at index 4 and ending at index 13.
Enter your regex: .*+foo // possessive quantifier
Enter input string to search: xfooxxxxxxfoo
No match found.
У поясненні зазначається з'їдання всього вхідного рядка, вживання букв , відключення відповідника , найправіше виникнення "foo" було відрегульовано тощо.
На жаль, незважаючи на приємні метафори, я все ще не розумію, що хто їсть ... Чи знаєте ви з іншого підручника, який пояснює (стисло), як працюють двигуни регулярних виразів?
Крім того, якщо хтось може пояснити дещо іншим фразуванням наступний параграф, це буде дуже вдячно:
Перший приклад використовує жадібний квантор. *, Щоб знайти "що завгодно", нульовий або більше разів, а потім літери "f" "o" "o". Оскільки кількісний показник жадібний,. * Частина виразу спочатку з'їдає весь вхідний рядок. На даний момент загальний вираз не може досягти успіху, оскільки три останні букви ("f" "o" "o") вже були вжиті ( ким? ). Тож матч повільно відступає ( справа-наліво? ) Одну букву за часом, поки не буде відрегульовано крайне праворуч виникнення "foo" ( що це означає? ), І в цей момент збіг проходить, і пошук закінчується.
Однак другий приклад - це неохоче, тому він починається спочатку споживаючи ( ким? ) "Нічого". Оскільки "foo" не з'являється на початку рядка, він змушений проковтнути ( хто проковтує?) Першу букву ("x"), яка запускає першу відповідність у 0 і 4. Наш тестовий джгут продовжує процес до введення рядка вводу. Він знаходить ще один матч у 4 та 13.
У третьому прикладі не вдається знайти збіг, оскільки кількісний показник є присвійним. У цьому випадку весь рядок вводу споживається. * +, ( Як? ), Не залишаючи нічого іншого, щоб задовольнити "foo" в кінці виразу. Використовуйте присвійний кількісний показник для ситуацій, коли ви хочете захопити все що-небудь, не відступаючи ніколи ( що означає відступ? ); він буде перевершувати еквівалентний жадібний кількісний показник у випадках, коли відповідність знайдена не відразу.
*
,+
і?
є жадібними. Мінімально квантори подобається*?
,+?
і??
є ледачими. Присвійні Квантор подобаються*+
,++
і?+
є липкими.