Период по умолчанию не будет соответствовать разрывам строк.Вам нужно будет использовать модификатор s
.
Кроме того, ваша первая точка жадная, и она будет поглощать все ваши <
до последней, которая все еще позволяет сопоставить оставшийся шаблон.Вместо использования не жадной точки .*?
, я бы использовал отрицательный класс символов, чтобы сопоставить все, кроме <
.
/[^<]*<(.*)>.*/s
См. На Regex101
Альтернативным методом будет использование символов \r
(возврат каретки) и \n
(новая строка) в классе символов:
/[^<]*<((?:.|[\r\n])*)>.*/