Я проходил через Java Tutorial on Quantifiers.
Существует различие, упомянутое среди различий среди жадных, неохотных и властных квантификаторов.
Я не могу понять, в чем разница.
Объяснение представлено следующим образом:
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.
В первом примере используется жадный квантификатор. * для поиска "ничего", ноль или более раз, за которым следуют буквы "f" "o" "o". Поскольку квантификатор является жадным, часть выражения. * Сначала вырабатывает всю входную строку. На этом этапе общее выражение не может быть успешным, потому что последние три буквы ( "f" "o" "o" ) уже были использованы. Таким образом, помощник медленно откладывает одну букву за раз до тех пор, пока правильное появление "foo" не будет опрокинуто, после чего совпадение завершится успешно и поиск завершится.
Второй пример, однако, неохотно, поэтому он начинается с первого потребления "ничего". Поскольку "foo" не появляется в начале строки, он вынужден усвоить первую букву ( "x" ), которая запускает первое совпадение с 0 и 4. Наш тестовый жгут продолжит процесс до тех пор, пока строка ввода не будет истощены. Он находит другое совпадение в 4 и 13.
Третий пример не может найти совпадение, потому что квантификатор является притяжательным. В этом случае вся входная строка потребляется. * +, Не оставляя ничего лишнего, чтобы удовлетворить "foo" в конце выражения. Используйте притяжательный квантификатор для ситуаций, когда вы хотите захватить все что-либо, не отступая; он будет превосходить эквивалентный жадный квантификатор в случаях, когда совпадение не будет найдено сразу.