if you would like to use regex for matching emails, the following will match "sensible" addresses.
preg_match('/^([a-z0-9]+([_\.\-]{1}[a-z0-9]+)*){1}([@]){1}([a-z0-9]+([_\-]{1}[a-z0-9]+)*)+(([\.]{1}[a-z]{2,6}){0,3}){1}$/i', $email)
It's quite verbose but if you only want, like i said "sensible" addresses to pass - it does the job.
does get stuck on address like "example@somename.somewhere.com" because, after the @ symbol it looks for anything following a period to only be only 2-6 characters in length.
"example@somename-somewhere.com" however would pass fine.
I don't recommend trying to use a single regex solution for the job unless, as in my case, you only want to allow "sensible" addresses.
There is quite a good article that covers "correctly" validating email addresses here: http://www.linuxjournal.com/article/9585