Статья Автор: Деникина Н.В., Деникин А.В.

Вопрос 24. Поиск в тексте регулярными выражениями. Типовые паттерны. Часть 5 (Жадность vs Ленивость)

Что такое жадность?

По умолчанию все квантификаторы (*, +, ?, {n,m}) — жадные. Это значит, что они пытаются захватить как можно больше символов.



 ['AXXXXA'] — захватил всё от первого A до последнего

Как работает жадный поиск:

  1. A — нашли первую букву A (позиция 0)
  2. .* — захватываем ВСЁ до конца строки: XXXXA
  3. Пытаемся найти A в конце — не получается (строка кончилась)
  4. Откатываемся на один символ назад
  5. Проверяем — это A? Да! Совпадение найдено: AXXXXA

Что такое ленивость?

Добавляем ? после квантификатора — он становится ленивым и захватывает как можно меньше.



Как работает ленивый поиск:

  1. A — нашли первую букву A (позиция 0)
  2. .*? — пробуем захватить ноль символов
  3. Проверяем — следующий символ A? Нет, это X
  4. Захватываем один символ X, проверяем следующий — это A? Да!
  5. Совпадение: AXA

Как работает ленивый поиск:

  1. A — нашли первую букву A (позиция 0)
  2. .*? — пробуем захватить ноль символов
  3. Проверяем — следующий символ A? Нет, это X
  4. Захватываем один символ X, проверяем следующий — это A? Да!
  5. Совпадение: AXA

Сравнение на примерах



Практические примеры 

Задача: Найти все числа, ограниченные буквами FF с обеих сторон.


Печать