С perlfaq6: Что это значит, что регулярные выражения являются жадными? Как я могу обойти это?
Большинство людей имеют в виду, что жадные регулярные выражения совпадают настолько, насколько они могут. Технически говоря, это на самом деле квантификаторы (?, *, +, {}), Которые являются жадными, а не весь шаблон; Perl предпочитает локальную жадность и немедленное удовлетворение общей жадности. Чтобы получить не жадные версии тех же квантификаторов, используйте (??, * ?, + ?, {}?).
Пример:
$s1 = $s2 = "I am very very cold";
$s1 =~ s/ve.*y //; # I am cold
$s2 =~ s/ve.*?y //; # I am very cold
Обратите внимание, как вторая подстановка перестала совпадать, как только она встретила "y". *? Квантификатор эффективно сообщает механизму регулярных выражений, что нужно как можно быстрее найти совпадение и передать управление следующему в строке, как если бы вы играли в «горячий картофель».