#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?mix)^ # Start of version string" & @CRLF & _
"\s* # Ignore leading whitespace" & @CRLF & _
"(?:v\.?)? # Optional "v" or "v." before the version" & @CRLF & _
"(?<major>\d+) \. (?<minor>\d+) \. (?<patch>\d+) # MAJOR.MINOR.PATCH" & @CRLF & _
"(?:- # Pre-release versions start with '-'" & @CRLF & _
"(?<pre> # Capture the pre-release identifier(s)" & @CRLF & _
"(?: # The PR rules are annoyingly tight" & @CRLF & _
"[0-9A-Za-z-] # No leading `0`, but a `0` on its own is fine" & @CRLF & _
"| # More than one character..." & @CRLF & _
"[1-9A-Za-z-][0-9A-Za-z-]* # ...means no leading zero" & @CRLF & _
") # That's the FIRST pre-release identifier" & @CRLF & _
"(?: # Multiple are allowed..." & @CRLF & _
"\. # ...dot-separated..." & @CRLF & _
"(?: # ...with the same rules as above" & @CRLF & _
"[0-9A-Za-z-]" & @CRLF & _
"|" & @CRLF & _
"[1-9A-Za-z-][0-9A-Za-z-]*" & @CRLF & _
")" & @CRLF & _
")* # Of course, you can also have just the one" & @CRLF & _
") # End name-cap group `pre`" & @CRLF & _
")? # End non-cap group encompassing the leading `-` and the identifiers" & @CRLF & _
"(?: # Built metadata is SIMILAR, but with two differences:" & @CRLF & _
"\+ # Difference one: starts with `+`" & @CRLF & _
"(?<meta>" & @CRLF & _
"[0-9A-Za-z-]+ # Difference two: leading `0` is allowed, so the match rule is simpler" & @CRLF & _
"(?:\.[0-9A-Za-z-]+)* # Same dot-delim repetition" & @CRLF & _
") # End name-cap group `meta`" & @CRLF & _
")? # End non-cap group encompassing leading `+` and identifiers" & @CRLF & _
"\s* # Ignore trailing whitespace" & @CRLF & _
"$ # End version string"
Local $sString = "1.0.0" & @CRLF & _
"1.0.0-alpha" & @CRLF & _
"1.0.0-alpha.1" & @CRLF & _
"1.0.0-0.3.7" & @CRLF & _
"1.0.0-x.7.z.92" & @CRLF & _
"1.0.0-alpha+001" & @CRLF & _
"1.0.0+20130313144700" & @CRLF & _
"1.0.0-beta+exp.sha.5114f85"
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