i am looking for a regular express to validate a list of email addresses like the following
test1@abd.com;test.test@abc.com;test3@test.com
and>
Actually, all those are very poor patterns for matching a mail address. To strictly validate an RFC 5322 mail address with zero false negatives and zero false positives, you need this precise pattern:
(?x)
(?(DEFINE)
(? (?&mailbox) | (?&group))
(? (?&name_addr) | (?&addr_spec))
(? (?&display_name)? (?&angle_addr))
(? (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
(? (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ; (?&CFWS)?)
(? (?&phrase))
(? (?&mailbox) (?: , (?&mailbox))*)
(? (?&local_part) \@ (?&domain))
(? (?&dot_atom) | (?"ed_string))
(? (?&dot_atom) | (?&domain_literal))
(? (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
\] (?&CFWS)?)
(? (?&dtext) | (?"ed_pair))
(? (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])
(? (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
(? (?&CFWS)? (?&atext)+ (?&CFWS)?)
(? (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
(? (?&atext)+ (?: \. (?&atext)+)*)
(? [\x01-\x09\x0b\x0c\x0e-\x7f])
(? \\ (?&text))
(? (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
(? (?&qtext) | (?"ed_pair))
(? (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
(?&FWS)? (?&DQUOTE) (?&CFWS)?)
(? (?&atom) | (?"ed_string))
(? (?&word)+)
# Folding white space
(? (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
(? (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
(? (?&ctext) | (?"ed_pair) | (?&comment))
(? \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
(? (?: (?&FWS)? (?&comment))*
(?: (?:(?&FWS)? (?&comment)) | (?&FWS)))
# No whitespace control
(? [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])
(? [A-Za-z])
(? [0-9])
(? \x0d \x0a)
(? ")
(? [\x20\x09])
)
(?&address) # finally, match a mail address
I discuss this in more detail in this answer.
That needs a Perl Compatible Regular Expression (PCRE) library, or Perl itself, to work properly. I cannot guarantee that perl incompatible pattern engines will correctly handle the recursion.