#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?xm)(?(DEFINE)
" & @CRLF & _
" (?<addr_spec> (?&local_part) @ (?&domain) )
" & @CRLF & _
" (?<local_part> (?&dot_atom) | (?"ed_string) | (?&obs_local_part) )
" & @CRLF & _
" (?<domain> (?&dot_atom) | (?&domain_literal) | (?&obs_domain) )
" & @CRLF & _
" (?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dtext) )* (?&FWS)? \] (?&CFWS)? )
" & @CRLF & _
" (?<dtext> [\x21-\x5a] | [\x5e-\x7e] | (?&obs_dtext) )
" & @CRLF & _
" (?<quoted_pair> \\ (?: (?&VCHAR) | (?&WSP) ) | (?&obs_qp) )
" & @CRLF & _
" (?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)? )
" & @CRLF & _
" (?<dot_atom_text> (?&atext) (?: \. (?&atext) )* )
" & @CRLF & _
" (?<atext> [a-zA-Z0-9!#$%&'*+\/=?^_`{|}~-]+ )
" & @CRLF & _
" (?<atom> (?&CFWS)? (?&atext) (?&CFWS)? )
" & @CRLF & _
" (?<word> (?&atom) | (?"ed_string) )
" & @CRLF & _
" (?<quoted_string> (?&CFWS)? " (?: (?&FWS)? (?&qcontent) )* (?&FWS)? " (?&CFWS)? )
" & @CRLF & _
" (?<qcontent> (?&qtext) | (?"ed_pair) )
" & @CRLF & _
" (?<qtext> \x21 | [\x23-\x5b] | [\x5d-\x7e] | (?&obs_qtext) )
" & @CRLF & _
" # comments and whitespace
" & @CRLF & _
" (?<FWS> (?: (?&WSP)* \r\n )? (?&WSP)+ | (?&obs_FWS) )
" & @CRLF & _
" (?<CFWS> (?: (?&FWS)? (?&comment) )+ (?&FWS)? | (?&FWS) )
" & @CRLF & _
" (?<comment> \( (?: (?&FWS)? (?&ccontent) )* (?&FWS)? \) )
" & @CRLF & _
" (?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment) )
" & @CRLF & _
" (?<ctext> [\x21-\x27] | [\x2a-\x5b] | [\x5d-\x7e] | (?&obs_ctext) )
" & @CRLF & _
" # obsolete tokens
" & @CRLF & _
" (?<obs_domain> (?&atom) (?: \. (?&atom) )* )
" & @CRLF & _
" (?<obs_local_part> (?&word) (?: \. (?&word) )* )
" & @CRLF & _
" (?<obs_dtext> (?&obs_NO_WS_CTL) | (?"ed_pair) )
" & @CRLF & _
" (?<obs_qp> \\ (?: \x00 | (?&obs_NO_WS_CTL) | \n | \r ) )
" & @CRLF & _
" (?<obs_FWS> (?&WSP)+ (?: \r\n (?&WSP)+ )* )
" & @CRLF & _
" (?<obs_ctext> (?&obs_NO_WS_CTL) )
" & @CRLF & _
" (?<obs_qtext> (?&obs_NO_WS_CTL) )
" & @CRLF & _
" (?<obs_NO_WS_CTL> [\x01-\x08] | \x0b | \x0c | [\x0e-\x1f] | \x7f )
" & @CRLF & _
" # character class definitions
" & @CRLF & _
" (?<VCHAR> [\x21-\x7E] )
" & @CRLF & _
" (?<WSP> [ \t] )
" & @CRLF & _
")
" & @CRLF & _
"^(?&addr_spec)$"
Local $sString = " Valid" & @CRLF & _
"-------" & @CRLF & _
"first.last@iana.org" & @CRLF & _
"1234567890123456789012345678901234567890123456789012345678901234@iana.org" & @CRLF & _
""first\"last"@iana.org" & @CRLF & _
""first@last"@iana.org" & @CRLF & _
""first\\last"@iana.org" & @CRLF & _
"x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x2" & @CRLF & _
"1234567890123456789012345678901234567890123456789012345678@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.123456789012345678901234567890123456789012345678901234567890123.iana.org" & @CRLF & _
"first.last@[12.34.56.78]" & @CRLF & _
"first.last@[IPv6:::12.34.56.78]" & @CRLF & _
"first.last@[IPv6:::b3:b4]" & @CRLF & _
"first.last@[IPv6:::]" & @CRLF & _
"first.last@[IPv6:1111:2222:3333::4444:12.34.56.78]" & @CRLF & _
""first\last"@iana.org" & @CRLF & _
"user+mailbox@iana.org" & @CRLF & _
"customer/department@iana.org " & @CRLF & _
"customer/department=shipping@iana.org" & @CRLF & _
""Doug \"Ace\" L."@iana.org" & @CRLF & _
"+1~1+@iana.org" & @CRLF & _
"{_test_}@iana.org" & @CRLF & _
""[[ test ]]"@iana.org" & @CRLF & _
""test blah"@iana.org" & @CRLF & _
"(foo)cal(bar)@(baz)iamcal.com(quux)" & @CRLF & _
"cal(woo(yay)hoopla)@iamcal.com" & @CRLF & _
"cal(foo\@bar)@iamcal.com" & @CRLF & _
"cal(foo\)bar)@iamcal.com" & @CRLF & _
"first(Welcome to the ("wonderful" (!)) world of email)@iana.org" & @CRLF & _
"pete(his account)@silly.test(his host)" & @CRLF & _
"c@(Chris's host.)public.example" & @CRLF & _
"" & @CRLF & _
" Invalid" & @CRLF & _
"---------" & @CRLF & _
"first@...........com" & @CRLF & _
"first.last@sub.do,com" & @CRLF & _
"first\@last@iana.org" & @CRLF & _
"first.last" & @CRLF & _
".first.last@iana.org" & @CRLF & _
"first.last.@iana.org" & @CRLF & _
""first"last"@iana.org" & @CRLF & _
""""@iana.org" & @CRLF & _
"first\\@last@iana.org" & @CRLF & _
"Doug\ \"Ace\"\ Lovell@iana.org" & @CRLF & _
"()[]\;:,><@iana.org" & @CRLF & _
"test@." & @CRLF & _
"test@[123.123.123.123" & @CRLF & _
"test@123.123.123.123]" & @CRLF & _
"" & @CRLF & _
""
Local $aArray = StringRegExp($sString, $sRegex, $STR_REGEXPARRAYGLOBALFULLMATCH)
Local $aFullArray[0]
For $i = 0 To UBound($aArray) -1
_ArrayConcatenate($aFullArray, $aArray[$i])
Next
$aArray = $aFullArray
; 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