Шаблон preg
требует пары символов, которые ограничивают сам шаблон. Здесь ваш узор заключен в первую пару круглых скобок, а все остальное - снаружи.
Попробуйте следующее:
$body=preg_replace("/(.*)<!-- start -->(.*)<!-- end -->(.*)/","$2",$body);
Это всего лишь синтаксис, и нет гарантии, что сам шаблон выглядит подозрительно.
Предположим, что в вашем примере текст:
preg_match('#<!-- start -->(.*?)<!-- end -->#s', $text, $match);
$inner_text = trim($match[1]);
Попробуйте следующее:
$body = preg_replace("/(.*)<!-- start -->(.*)<!-- end -->(.*)/","$2",$body);