#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?mx)(?P<prop>[\w-]+) # property name" & @CRLF & _
" (?P<prop_params>; # property params, e.g. dstparams " & @CRLF & _
" ( [\w/,-]+(=[\w/,-]+)?) # first param key[=val] element" & @CRLF & _
" (;[\w/,-]+(=[\w/,-]+)?)* # additional key[=val] elements" & @CRLF & _
")?: # colon separator between prop and main params" & @CRLF & _
"(?P<params> # main params" & @CRLF & _
" ( [\w/,-]+(=[\w/,-]+)?) # first param key[=val] element" & @CRLF & _
" (;[\w/,-]+(=[\w/,-]+)?)* # additional key[=val] elements" & @CRLF & _
")"
Local $sString = "RRULE:FREQ=WEEKLY;UNTIL=20211231T183000Z;INTERVAL=1;BYDAY=TU,TH" & @CRLF & _
"RRULE:FREQ=WEEKLY;WKST=SU;INTERVAL=4;BYDAY=FR" & @CRLF & _
"RRULE:FREQ=DAILY;UNTIL=20150628;INTERVAL=3" & @CRLF & _
"RRULE:FREQ=DAILY;UNTIL=20150628" & @CRLF & _
"RRULE:FREQ=DAILY" & @CRLF & _
"RRULE:ABC;DEF=GHI;jkl;abc=999" & @CRLF & _
"" & @CRLF & _
"# negative example" & @CRLF & _
"RRULE:" & @CRLF & _
"" & @CRLF & _
"# more examples" & @CRLF & _
"DTSTART;TZID=America/New_York:19980101T090000" & @CRLF & _
"DTSTART;TZID=America/New_York:AB" & @CRLF & _
"DTSTART;TZID=America;more;junk:AB=123;DE=456" & @CRLF & _
"DTSTART;TZID=America:AB" & @CRLF & _
"DTSTART;junk:ABC=12333" & @CRLF & _
"RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z" & @CRLF & _
"DT;junk;more;junk=junk:ABC;YZO=123" & @CRLF & _
"" & @CRLF & _
"RDATE;VALUE=DATE:20150609,20150611" & @CRLF & _
"EXDATE;VALUE=DATE:20150610" & @CRLF & _
"RDATE;TZID=America/New_York:19970714T083000" & @CRLF & _
"RDATE;VALUE=DATE:19970101,19970120,19970217,19970421" & @CRLF & _
" 19970526,19970704,19970901,19971014,19971128,19971129,19971225" & @CRLF & _
"" & @CRLF & _
" RRULE:FREQ=YEARLY;UNTIL=20000131T140000Z;BYMONTH=1;BYDAY=SU,MO,TU,WE,TH,FR,SA" & @CRLF & _
"" & @CRLF & _
" BEGIN:VTIMEZONE" & @CRLF & _
" TZID:America/New_York" & @CRLF & _
" LAST-MODIFIED:20050809T050000Z" & @CRLF & _
" BEGIN:DAYLIGHT" & @CRLF & _
" DTSTART:19670430T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z" & @CRLF & _
" TZOFFSETFROM:-0500" & @CRLF & _
" TZOFFSETTO:-0400" & @CRLF & _
" TZNAME:EDT" & @CRLF & _
" END:DAYLIGHT" & @CRLF & _
" BEGIN:STANDARD" & @CRLF & _
" DTSTART:19671029T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z" & @CRLF & _
" TZOFFSETFROM:-0400" & @CRLF & _
" TZOFFSETTO:-0500" & @CRLF & _
" TZNAME:EST" & @CRLF & _
" END:STANDARD" & @CRLF & _
" BEGIN:DAYLIGHT" & @CRLF & _
" DTSTART:19740106T020000" & @CRLF & _
" RDATE:19750223T020000" & @CRLF & _
" TZOFFSETFROM:-0500" & @CRLF & _
" TZOFFSETTO:-0400" & @CRLF & _
" TZNAME:EDT" & @CRLF & _
" END:DAYLIGHT" & @CRLF & _
" BEGIN:DAYLIGHT" & @CRLF & _
" DTSTART:19760425T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z" & @CRLF & _
" TZOFFSETFROM:-0500" & @CRLF & _
" TZOFFSETTO:-0400" & @CRLF & _
" TZNAME:EDT" & @CRLF & _
" END:DAYLIGHT" & @CRLF & _
" BEGIN:DAYLIGHT" & @CRLF & _
" DTSTART:19870405T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z" & @CRLF & _
" TZOFFSETFROM:-0500" & @CRLF & _
" TZOFFSETTO:-0400" & @CRLF & _
" TZNAME:EDT" & @CRLF & _
" END:DAYLIGHT" & @CRLF & _
" BEGIN:DAYLIGHT" & @CRLF & _
" DTSTART:20070311T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU" & @CRLF & _
" TZOFFSETFROM:-0500" & @CRLF & _
" TZOFFSETTO:-0400" & @CRLF & _
" TZNAME:EDT" & @CRLF & _
" END:DAYLIGHT" & @CRLF & _
" BEGIN:STANDARD" & @CRLF & _
" DTSTART:20071104T020000" & @CRLF & _
" RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU" & @CRLF & _
" TZOFFSETFROM:-0400" & @CRLF & _
" TZOFFSETTO:-0500" & @CRLF & _
" TZNAME:EST" & @CRLF & _
" END:STANDARD" & @CRLF & _
" END:VTIMEZONE"
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