#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?mux)^( # Match only leap years" & @CRLF & _
" \d\d[2468][048] # multiple of four but not 100" & @CRLF & _
" |\d\d[13579][26] # ..." & @CRLF & _
" |\d\d0[48] # ..." & @CRLF & _
" |[02468][048]00 # multiple of four hundred" & @CRLF & _
" |[13579][26]00 # ..." & @CRLF & _
")$"
Local $sString = "^(" & @CRLF & _
"\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]| # multiple of four but not 100" & @CRLF & _
" [02468][048]00 |[13579][26]00 # multiple of four hundred" & @CRLF & _
")" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"// accept: multiple of four ()" & @CRLF & _
"0004" & @CRLF & _
"0008" & @CRLF & _
"0012" & @CRLF & _
"0016" & @CRLF & _
"0020" & @CRLF & _
"0024" & @CRLF & _
"0028" & @CRLF & _
"0032" & @CRLF & _
"0036" & @CRLF & _
"0040" & @CRLF & _
"0044" & @CRLF & _
"0048" & @CRLF & _
"0052" & @CRLF & _
"0056" & @CRLF & _
"0060" & @CRLF & _
"0064" & @CRLF & _
"0068" & @CRLF & _
"0072" & @CRLF & _
"0076" & @CRLF & _
"0080" & @CRLF & _
"0084" & @CRLF & _
"0088" & @CRLF & _
"0092" & @CRLF & _
"0096" & @CRLF & _
"1560" & @CRLF & _
"2004" & @CRLF & _
"2008" & @CRLF & _
"2012" & @CRLF & _
"2016" & @CRLF & _
"2020" & @CRLF & _
"2024" & @CRLF & _
"2028" & @CRLF & _
"2032" & @CRLF & _
"2036" & @CRLF & _
"2040" & @CRLF & _
"2044" & @CRLF & _
"9996" & @CRLF & _
"// accept: Multiple of 400" & @CRLF & _
"0000" & @CRLF & _
"0400" & @CRLF & _
"0800" & @CRLF & _
"1200" & @CRLF & _
"1600" & @CRLF & _
"2000" & @CRLF & _
"2400" & @CRLF & _
"2800" & @CRLF & _
"3200" & @CRLF & _
"3600" & @CRLF & _
"4000" & @CRLF & _
"4400" & @CRLF & _
"4800" & @CRLF & _
"5200" & @CRLF & _
"5600" & @CRLF & _
"6000" & @CRLF & _
"6400" & @CRLF & _
"6800" & @CRLF & _
"7200" & @CRLF & _
"7600" & @CRLF & _
"8000" & @CRLF & _
"8400" & @CRLF & _
"8800" & @CRLF & _
"9200" & @CRLF & _
"9600" & @CRLF & _
"// REJECT: Not a multiple of four" & @CRLF & _
"0101" & @CRLF & _
"0102" & @CRLF & _
"0103" & @CRLF & _
"1537" & @CRLF & _
"1538" & @CRLF & _
"2001" & @CRLF & _
"2002" & @CRLF & _
"2003" & @CRLF & _
"2021" & @CRLF & _
"2022" & @CRLF & _
"2023" & @CRLF & _
"2025" & @CRLF & _
"2026" & @CRLF & _
"2027" & @CRLF & _
"2029" & @CRLF & _
"2030" & @CRLF & _
"2031" & @CRLF & _
"2033" & @CRLF & _
"2034" & @CRLF & _
"2035" & @CRLF & _
"2037" & @CRLF & _
"2038" & @CRLF & _
"2039" & @CRLF & _
"2041" & @CRLF & _
"2042" & @CRLF & _
"2043" & @CRLF & _
"9997" & @CRLF & _
"9998" & @CRLF & _
"9999" & @CRLF & _
"// REJECT: Multiple of 100 but not 400" & @CRLF & _
"0100" & @CRLF & _
"0200" & @CRLF & _
"0300" & @CRLF & _
"0500" & @CRLF & _
"0600" & @CRLF & _
"0700" & @CRLF & _
"0900" & @CRLF & _
"1000" & @CRLF & _
"1100" & @CRLF & _
"1500" & @CRLF & _
"2100" & @CRLF & _
"2200" & @CRLF & _
"2300" & @CRLF & _
"2500" & @CRLF & _
"2600" & @CRLF & _
"2700" & @CRLF & _
"2900" & @CRLF & _
"3000" & @CRLF & _
"3100" & @CRLF & _
"3300" & @CRLF & _
"3400" & @CRLF & _
"3500" & @CRLF & _
"3700" & @CRLF & _
"// REJECT: Negative dates not accepted (malformed)" & @CRLF & _
"-2000" & @CRLF & _
"-0400" & @CRLF & _
"-0100" & @CRLF & _
"-0004" & @CRLF & _
"// REJECT: Out of range date per RFC 3339" & @CRLF & _
"10000" & @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