Ответ на ваш первый вопрос прост, вы не правы.
Второй вопрос довольно интересный, чтобы понять это, нужно знать два факта:
- При успешном совпадении регулярное выражение прекращает сопоставление и возвращает результат, который оно считает успешным.
- Стандартные квантификаторы (
* + ?
и {min, max}
) являются жадными. это означает, что /<*/
будет соответствовать максимально возможному количеству <<<<<...
.
Итак, вернемся к регулярному выражению /<*/
. При совпадении
My email address is <webslave@work.com>.
Самое начало строки, ^
, соответствует регулярному выражению, в результате чего получается пустая строка. Это успешное совпадение, и следующий шаг, ^M
, не соответствует вашему регулярному выражению. так вуаля, Perl перестанет совпадать и выдаст пустой результат.
Затем перейдите ко второй строке
<My email address is <webslave@work.com>.
Самое начало строки, ^
, соответствует регулярному выражению, в результате чего получается пустая строка. Но , следующий шаг, ^<
, все еще соответствует вашему регулярному выражению. а квантификатор *
является жадным. Это будет соответствовать как можно больше. В результате получается <
.