The ultimate arbiter of what constitues a valid email address is the email provider, and you will never get a regex that matches that. Case in point: all the filters that ruled that the final domain segment must be 2-3 chacters long, then 2-4 when .info and .name appeared, then... dang it...
What you can test for is that an email address is plausible. NO FALSE REJECTIONS. So basically any character except @ for the name, and any character but @./ in the domain name segments, only one @ in the address, and at least one . in the domain name. You're helping people to type in their email address, not validating that it is an actual working address. The only way to validate that is to send it an email and see what happens.