#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?x)^ (?&address) $" & @CRLF & _
"(?(DEFINE)" & @CRLF & _
" (?<ALPHANUMERICE> " & @CRLF & _
" [A-Za-z0-9!\#$%&'*+\-\/=?^_`{|}~]" & @CRLF & _
" )" & @CRLF & _
" (?<CFWS> " & @CRLF & _
" (?: " & @CRLF & _
" (?: (?&FWS)? (?&comment) )++ " & @CRLF & _
" (?&FWS)?" & @CRLF & _
" ) " & @CRLF & _
" | (?&FWS) " & @CRLF & _
" )" & @CRLF & _
" (?<FWS> (?&WSPCRLF)++ )" & @CRLF & _
" (?<UTF8_extra_char> " & @CRLF & _
" (?=[\x{C2}-\x{DF}\x{E0}-\x{EF}\x{F0}-\x{F4}]) " & @CRLF & _
" (?: (?&UTF8_2) | (?&UTF8_3) | (?&UTF8_4) ) " & @CRLF & _
" )" & @CRLF & _
" (?<UTF8_tail> [\x{80}-\x{BF}] )" & @CRLF & _
" (?<UTF8_2> [\x{C2}-\x{DF}] (?&UTF8_tail) )" & @CRLF & _
" (?<UTF8_3> \x{E0} [\x{A0}-\x{BF}] (?&UTF8_tail)" & @CRLF & _
" | [\x{E1}-\x{EC}] (?&UTF8_tail){2} " & @CRLF & _
" | \x{ED} [\x{80}-\x{9F}] (?&UTF8_tail) " & @CRLF & _
" | [\x{EE}\x{EF}] (?&UTF8_tail){2}" & @CRLF & _
" )" & @CRLF & _
" (?<UTF8_4> \x{F0} [\x{90}-\x{BF}] (?&UTF8_tail){2}" & @CRLF & _
" | [\x{F1}-\x{F3}] (?&UTF8_tail){3}" & @CRLF & _
" | \x{F4} [\x{80}-\x{8F}] (?&UTF8_tail){2}" & @CRLF & _
" )" & @CRLF & _
" (?<VCHARWSP> [\x{21}-\x{7E}\ \t] )" & @CRLF & _
" (?<WSPCRLF> [\ \t\x{0D}\x{0A}] )" & @CRLF & _
" (?<address> (?&mailbox_list) | (?&group) )" & @CRLF & _
" (?<addr_spec> (?&local_part) @ (?&domain) )" & @CRLF & _
" (?<utf8_addr_spec> " & @CRLF & _
" (?&utf8_local_part) @ (?&utf8_domain) " & @CRLF & _
" )" & @CRLF & _
" (?<alt_address> (?&FWS) < (?&addr_spec) > )" & @CRLF & _
" (?<angle_addr> (?&CFWS)? < " & @CRLF & _
" (?: (?&addr_spec) " & @CRLF & _
" | (?&utf8_addr_spec) (?&alt_address)? " & @CRLF & _
" | (?&obs_route)? (?&addr_spec) " & @CRLF & _
" ) " & @CRLF & _
" > (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<atext> (?&ALPHANUMERICE) )" & @CRLF & _
" (?<utf8_atext> " & @CRLF & _
" (?&ALPHANUMERICE) " & @CRLF & _
" | (?&UTF8_extra_char) " & @CRLF & _
" )" & @CRLF & _
" (?<atom> (?&CFWS)? (?&atext)++ (?&CFWS)? )" & @CRLF & _
" (?<utf8_atom> " & @CRLF & _
" (?&CFWS)? (?&utf8_atext)++ (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_ccontent> " & @CRLF & _
" (?&ctext) " & @CRLF & _
" | (?&utf8_quoted_pair) " & @CRLF & _
" | (?&comment) " & @CRLF & _
" )" & @CRLF & _
" (?<comment> " & @CRLF & _
" \( " & @CRLF & _
" (?: " & @CRLF & _
" (?&FWS)? (?&utf8_ccontent) " & @CRLF & _
" )*+ " & @CRLF & _
" (?&FWS)? " & @CRLF & _
" \) " & @CRLF & _
" )" & @CRLF & _
" (?<ctext> " & @CRLF & _
" [!-'*-\[\]-~] " & @CRLF & _
" | (?&obs_ctext) " & @CRLF & _
" | (?&UTF8_extra_char) " & @CRLF & _
" )" & @CRLF & _
" (?<display_name> (?&phrase) )" & @CRLF & _
" (?<domain> " & @CRLF & _
" (?&dot_atom) " & @CRLF & _
" | (?&domain_literal) " & @CRLF & _
" | (?&obs_domain) " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_domain> " & @CRLF & _
" (?&utf8_dot_atom) " & @CRLF & _
" | (?&domain_literal) " & @CRLF & _
" | (?&obs_domain) " & @CRLF & _
" )" & @CRLF & _
" (?<domain_literal> " & @CRLF & _
" (?&CFWS)? " & @CRLF & _
" \[ " & @CRLF & _
" (?: (?&FWS)? (?&dtext) )*+ " & @CRLF & _
" (?&FWS)? " & @CRLF & _
" \] " & @CRLF & _
" (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<dot_atom> " & @CRLF & _
" (?&CFWS)? (?&dot_atom_text) (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_dot_atom> " & @CRLF & _
" (?&CFWS)? (?&utf8_dot_atom_text) (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<dot_atom_text> " & @CRLF & _
" (?&atext)++ " & @CRLF & _
" (?: \. (?&atext)++ )*+ " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_dot_atom_text> " & @CRLF & _
" (?&utf8_atext)++ " & @CRLF & _
" (?: \. (?&utf8_atext)++ )*+ " & @CRLF & _
" )" & @CRLF & _
" (?<dtext> [!-Z^-~] | (?&obs_dtext) )" & @CRLF & _
" (?<group> " & @CRLF & _
" (?&display_name) : (?&group_list)? ; (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<group_list> " & @CRLF & _
" (?&mailbox_list) " & @CRLF & _
" | (?&CFWS) " & @CRLF & _
" | (?&obs_group_list) " & @CRLF & _
" )" & @CRLF & _
" (?<local_part> " & @CRLF & _
" (?&dot_atom) " & @CRLF & _
" | (?"ed_string) " & @CRLF & _
" | (?&obs_local_part) " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_local_part> " & @CRLF & _
" (?&utf8_dot_atom) " & @CRLF & _
" | (?&utf8_quoted_string) " & @CRLF & _
" | (?&obs_local_part) " & @CRLF & _
" )" & @CRLF & _
" (?<mailbox> " & @CRLF & _
" (?&name_addr) " & @CRLF & _
" | (?&addr_spec) " & @CRLF & _
" | (?&utf8_addr_spec) " & @CRLF & _
" )" & @CRLF & _
" (?<mailbox_list> " & @CRLF & _
" (?: " & @CRLF & _
" (?&mailbox) (?: , (?&mailbox) )*+ " & @CRLF & _
" ) " & @CRLF & _
" | (?&obs_mbox_list) " & @CRLF & _
" ) " & @CRLF & _
" (?<name_addr> (?&display_name)? (?&angle_addr) )" & @CRLF & _
" (?<obs_NO_WS_CTL> " & @CRLF & _
" [\x{01}-\x{08}\x{0B}\x{0C}\x{0E}-\x{1F}\x{7F}] " & @CRLF & _
" )" & @CRLF & _
" (?<obs_ctext> (?&obs_NO_WS_CTL) )" & @CRLF & _
" (?<obs_domain> (?&atom) (?: \. (?&atom) )*+ )" & @CRLF & _
" (?<obs_domain_list> " & @CRLF & _
" (?: (?&CFWS) | , )*+ " & @CRLF & _
" @ (?&domain) " & @CRLF & _
" (?: , (?&CFWS)? (?: @ (?&domain) )? )*+ " & @CRLF & _
" )" & @CRLF & _
" (?<obs_dtext> " & @CRLF & _
" (?&obs_NO_WS_CTL) | (?"ed_pair) " & @CRLF & _
" )" & @CRLF & _
" (?<obs_group_list> (?: (?&CFWS)? , )++ (?&CFWS)? )" & @CRLF & _
" (?<obs_local_part> (?&word) (?: \. (?&word) )*+ )" & @CRLF & _
" (?<obs_mbox_list> " & @CRLF & _
" (?: (?&CFWS)? , )*+ " & @CRLF & _
" (?&mailbox) " & @CRLF & _
" (?: , " & @CRLF & _
" (?: (?&mailbox) | (?&CFWS))? " & @CRLF & _
" )*+ " & @CRLF & _
" )" & @CRLF & _
" (?<obs_phrase> " & @CRLF & _
" (?&word) " & @CRLF & _
" (?: (?&word) | \. | (?&CFWS) )*+ " & @CRLF & _
" )" & @CRLF & _
" (?<obs_qp> " & @CRLF & _
" \\ " & @CRLF & _
" (?: " & @CRLF & _
" \x{00} " & @CRLF & _
" | (?&obs_NO_WS_CTL) " & @CRLF & _
" | [\x{0D}\x{0A}] " & @CRLF & _
" ) " & @CRLF & _
" )" & @CRLF & _
" (?<obs_qtext> (?&obs_NO_WS_CTL) )" & @CRLF & _
" (?<obs_route> (?&obs_domain_list) : )" & @CRLF & _
" (?<phrase> (?&word)++ | (?&obs_phrase) )" & @CRLF & _
" (?<qcontent> (?&utf8_qcontent) )" & @CRLF & _
" (?<utf8_qcontent> " & @CRLF & _
" (?&utf8_qtext) " & @CRLF & _
" | (?&utf8_quoted_pair) " & @CRLF & _
" )" & @CRLF & _
" (?<qtext> [!\#-\[\]-~] | (?&obs_qtext) )" & @CRLF & _
" (?<utf8_qtext> (?&qtext) | (?&UTF8_extra_char) )" & @CRLF & _
" (?<quoted_pair> " & @CRLF & _
" \\ (?&VCHARWSP) | (?&obs_qp) " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_quoted_pair> " & @CRLF & _
" \\ (?&utf8_text) | (?&obs_qp) " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_text> " & @CRLF & _
" [\x{01}-\x{09}\x{0D}\x{0A}\x{0E}-\x{7F}] " & @CRLF & _
" | (?&UTF8_extra_char) " & @CRLF & _
" )" & @CRLF & _
" (?<quoted_string> " & @CRLF & _
" (?&CFWS)? " " & @CRLF & _
" (?: (?&FWS)? (?&qcontent) )*+ " & @CRLF & _
" (?&FWS)? " (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<utf8_quoted_string> " & @CRLF & _
" (?&CFWS)? " " & @CRLF & _
" (?: (?&FWS)? (?&utf8_qcontent) )*+ " & @CRLF & _
" (?&FWS)? " (?&CFWS)? " & @CRLF & _
" )" & @CRLF & _
" (?<word> (?&utf8_atom) | (?&utf8_quoted_string) )" & @CRLF & _
")"
Local $sString = "John <a@b.c>, w@com, "wibb.[dhdhd]"@(comment)fred.com"
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYFULLMATCH)
; Present the entire match result
_ArrayDisplay($aArray, "Result")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for AutoIt, please visit: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm