#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "((19\d\d|20\d\d)-(0\d|1[0-2])-([0-2]\d|30|31))T((\d{2}):(\d{2}):(\d{2}))(?:\.(\d{3,6}))?(?:((?:([+-])(?:(0\d|1[012]))):?([0-5]\d))|Z?)"
Local $sString = "2008" & @CRLF & _
"2004-04-14" & @CRLF & _
"1997-01-27T18:57Z" & @CRLF & _
"2010-14-21T08:12:17.243+07:00" & @CRLF & _
"" & @CRLF & _
"2010-12-21T08:12:17.243Z" & @CRLF & _
"2010-12-21T08:12:17.243" & @CRLF & _
"2010-11-21T08:12:17.243+07:00" & @CRLF & _
"2010-11-01T08:12:17.243+07:00" & @CRLF & _
"2010-12-11T08:12:17.243+0700" & @CRLF & _
"2010-01-21T08:12:17.243+07:00" & @CRLF & _
"2010-11-31T08:12:17.243+07:00" & @CRLF & _
"2010-14-21T08:12:17.243-37:00" & @CRLF & _
"2010-11-32T08:12:17.243+07:00" & @CRLF & _
"2010-14-21T08:12:17.243+0000" & @CRLF & _
"2010-14-21T08:12:17.243+1000" & @CRLF & _
"2010-11-21T08:12:17.243+0060" & @CRLF & _
"2010-14-21T08:12:17.243+1000" & @CRLF & _
"2010-14-21T08:12:17.243+1000" & @CRLF & _
"Non-Matches " & @CRLF & _
"3:00, 2/28/2003" & @CRLF & _
"2004-07-12 14:25:59" & @CRLF & _
"1900-01-01 00:00:00" & @CRLF & _
"9999-12-31 23:59:59" & @CRLF & _
"Non-Matches " & @CRLF & _
"04-07-12 14:25:59" & @CRLF & _
"20004-07-12 14:25" & @CRLF & _
"2004/07/12 14:25:59"
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