you forgot .museum {6}
to check what is happening in your script try this code:
$pregex = '/[0-9a-zA-Z]+([-]?[0-9a-zA-Z])*\.([a-zA-Z]{2}(\.[a-zA-Z]{2,3})?)|([a-zA-Z]{3}(\.[a-zA-Z]{2})?)|([a-zA-Z]{4})$/';
$email = "someone@somewhere.org.com";
preg_match( $pregex, $email, $matches );
print "<pre>";
print_r($matches);
print "</pre>";
if you want to check out from the horses mouth about email...
read rfc2822 it will tell you what valid email addresses format is
check out http://www.icann.org it will tell you what valid top level domains are registered worldwide (.uk, .us etc)
maybe that will help in general