What does the dot stand for?
"[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+"
^
here
It matches the at-sign. If you remove it, your original regex with no lookahead will work.
Moreover, !
is a special character in bash (history expansion). You have to backslash it to use it literally.