Регулярное выражение выглядит не совсем правильно.В любом случае, во время выполнения этого регулярного выражения возникает ошибка «Ограничение возврата назад» (вы можете проверить это с помощью функции preg_last_error), поэтому вы можете увеличить предел возврата, чтобы он заработал:
ini_set('pcre.backtrack_limit', 1000000);
var_dump(preg_replace('~"?([^"]+)*"?\s<?([^>]+@[^>]+)>?~', '["$1","$2"]', 'hello@world.com'));
вывод:
string(15) "hello@world.com"