You have several mistakes. First, with the caret you're telling you want the @ symbol to be first in the string. So for an email that will never match. Then, you need to set a capturing group to actually get the part after the @. So it'd look like this:
<?php
$mail = "[email protected]";
preg_match('/@(.+)/', $mail, $output);
print_r($output[1]); // gmail.com
However, this is such a simple task that you should not use a regular expresion. explode() will do:
<?php
$mail = "[email protected]";
$mailArray = explode("@", $mail);
print_r($mailArray[1]); // gmail.com