1. я могу ошибаться, но мне кажется, вы читаете построчно. вычитайте целиком, добавив
$/=undef
2. слишком усложняете, добавьте
/sm
чтоб точка включала перенос строк
3. возможно нужно брать минимальный блок,
Вам примерно нужно, что-то вроде
$/ = undef; s{ <FilesMatch .*? /FilesMatch> }{replace}gxsm