#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?m)^(=?202\d)(\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\d{1,3})([\dA-Z]{0,4})A"
Local $sString = "Matches R1 R2 R3 R4 R5 R6" & @CRLF & _
"2022A144A OK OK OK OK \D\d\d\d" & @CRLF & _
"20228BC3A OK OK OK OK \d\D\D\d" & @CRLF & _
"20228Z1DA OK OK OK OK \d\D\d\D" & @CRLF & _
"2022K2 A " & @CRLF & _
"20229999A NOK \d\d\d\d" & @CRLF & _
"2022B123A OK OK OK OK \D\d\d\d" & @CRLF & _
"20221B23A OK OK OK OK \d\D\d\d" & @CRLF & _
"202212B3A NOK NOK NOK OK OK \d\d\D\d" & @CRLF & _
"2022123BA NOK OK \d\d\d\D" & @CRLF & _
"2022ABCDA " & @CRLF & _
"2022K2 A " & @CRLF & _
"" & @CRLF & _
"Matches 100% as desired" & @CRLF & _
"R 12 2022(\d\D\w\w|\D\d\w\w|\d\d\D\w|\d\d\w\D|\D\D\D\D)A" & @CRLF & _
"R 13 ^(=?202\d)(\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\d{1,3})([\dA-Z]{0,4})A" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"Should match" & @CRLF & _
"R1: 2022\d\D\w\wA" & @CRLF & _
"R2: 2022\D\d\w\wA" & @CRLF & _
"R3: 2022(\d\D\w\w|\D\d\w\w)A" & @CRLF & _
"R4: 2022(\d\D\w\w|\D\d\w\w|\d\d\D\w)A" & @CRLF & _
"R5: 2022(\d\D\w\w|\D\d\w\w|\d\d\D\w|\d\d\w\D)A" & @CRLF & _
"" & @CRLF & _
"R 10 ^(=?202\d)(\d*[A-Z]|[A-Z]*)([\dA-Z]{1,3})A" & @CRLF & _
"R 11 ^(=?202\d)(\d{1,3}[A-Z]*)([\dA-Z]{1,3})A" & @CRLF & _
"R 12 ^(=?202\d)(\d{1,3}[A-Z]{1,3}|[A-Z]{1,3}\d{1,3})([\dA-Z]{0,3})A" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"^ Start of string" & @CRLF & _
"(?=[a-z\d]{8,}$) Positive lookahead, assert 8 or more chars a-z or digits till end of string" & @CRLF & _
"(?=\d*[a-z]) Positive lookahead to assert at least a char a-z" & @CRLF & _
"[a-z]* Match optional chars a-z" & @CRLF & _
"\d Match at least a single digit" & @CRLF & _
"[a-z\d]* Match optional chars a-z or digits" & @CRLF & _
"$ End of string" & @CRLF & _
"" & @CRLF & _
"Should not match" & @CRLF & _
"R6: 2022([A-Z0-9]{1,4})A" & @CRLF & _
"R7: 2022(\d|\w){1,3}\wA <-- also matches 20229999A which it should not" & @CRLF & _
"R8: 2022\w\w\s\sA" & @CRLF & _
"R9 2022\d\d\d\dA"
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