#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?m)(?<=\D|^)(?<year>\d{4})(?<sep>[^\w\s])(?<month>1[0-2]|0[1-9])\k<sep>(?<day>0[1-9]|[12][0-9]|(?<=11\k<sep>|[^1][4-9]\k<sep>)30|(?<=1[02]\k<sep>|[^1][13578]\k<sep>)3[01])(?=\D|$)"
Local $sString = "" & @CRLF & _
"2020-01-01" & @CRLF & _
"2020-01-31" & @CRLF & _
"2020-02-29" & @CRLF & _
"2020-03-31" & @CRLF & _
"2020-04-30" & @CRLF & _
"2020-05-31" & @CRLF & _
"2020-06-30" & @CRLF & _
"2020-07-31" & @CRLF & _
"2020-08-31" & @CRLF & _
"2020-09-30" & @CRLF & _
"2020-10-31" & @CRLF & _
"2020-11-30" & @CRLF & _
"2020-12-31" & @CRLF & _
"2020-01-01 00:00:00,000" & @CRLF & _
"2020-01-01_00:00:00,000" & @CRLF & _
"2020-01-01-00:00:00,000" & @CRLF & _
"2020-01-01T00:00:00,000" & @CRLF & _
"2222-01-01" & @CRLF & _
"2222/11/22" & @CRLF & _
"2222.11.22" & @CRLF & _
"" & @CRLF & _
"// Invalid dates" & @CRLF & _
"2020-00-01" & @CRLF & _
"2020-01-00" & @CRLF & _
"000-01-01" & @CRLF & _
"222-01-01" & @CRLF & _
"2020-1-1" & @CRLF & _
"2020-1-01" & @CRLF & _
"2020-01-1" & @CRLF & _
"2020-22-01" & @CRLF & _
"2020-01-33" & @CRLF & _
"2020-01-32" & @CRLF & _
"2020-02-30" & @CRLF & _
"2020-03-32" & @CRLF & _
"2020-04-31" & @CRLF & _
"2020-05-32" & @CRLF & _
"2020-06-31" & @CRLF & _
"2020-07-32" & @CRLF & _
"2020-08-32" & @CRLF & _
"2020-09-31" & @CRLF & _
"2020-10-32" & @CRLF & _
"2020-11-31" & @CRLF & _
"2020-12-32" & @CRLF & _
"a222-01-01" & @CRLF & _
"2a22-01-01" & @CRLF & _
"22a2-01-01" & @CRLF & _
"222a-01-01" & @CRLF & _
"2222-a1-01" & @CRLF & _
"2222-0a-01" & @CRLF & _
"2222-1a-01" & @CRLF & _
"2222-01-a1" & @CRLF & _
"2222-01-0a" & @CRLF & _
"2222-01-1a"
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