Есть лучший способ разрешить точке совпадать с новыми строками (/m
модификатор):
regexp = /\{start_grab_entries\}(.*?)\{end_grab_entries\}/m
Кроме того, сделайте *
ленивым, добавив ?
, или вы можете совпастьслишком много, если в вашем входе более одного такого раздела.
Тем не менее, причина, по которой вы получили пустое совпадение, состоит в том, что вы повторили саму группу захвата ;поэтому вы поймали только последнее повторение (в данном случае, \n
).
Это бы "сработало", если бы вы поместили группу захвата вне повторения:
\{start_grab_entries\}((?:.|\n)*)\{end_grab_entries\}`
но, как сказано выше, есть лучший способсделать это.