#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?m)(?P<release>(?:0|[1-9])\d*(?:\.(?:0|[1-9]\d*)){2})(?:-(?P<pre>(?P<prel>a|b|rc)(?P<pren>(?:0|[1-9])\d*)))?(?:\+(?P<local>[a-z\d]+(?:[-_\.][a-z\d]+)*))?"
Local $sString = "Valid PEP440 Verions" & @CRLF & _
"" & @CRLF & _
"Final versions" & @CRLF & _
"0.9" & @CRLF & _
"0.9.1" & @CRLF & _
"0.9.2" & @CRLF & _
"0.9.10" & @CRLF & _
"0.9.11" & @CRLF & _
"1.0.1" & @CRLF & _
"2.0.1" & @CRLF & _
"" & @CRLF & _
"Version epochs" & @CRLF & _
"1.0" & @CRLF & _
"1.1" & @CRLF & _
"2.0" & @CRLF & _
"2013.10" & @CRLF & _
"2014.04" & @CRLF & _
"2013.10" & @CRLF & _
"2014.04" & @CRLF & _
"1!1.0" & @CRLF & _
"1!1.1" & @CRLF & _
"1!2.0" & @CRLF & _
"" & @CRLF & _
"Examples of compliant version schemes" & @CRLF & _
"Simple "major.minor" versioning:" & @CRLF & _
"0.1" & @CRLF & _
"0.2" & @CRLF & _
"0.3" & @CRLF & _
"1.0" & @CRLF & _
"1.1" & @CRLF & _
"Simple "major.minor.micro" versioning:" & @CRLF & _
"1.1.0" & @CRLF & _
"1.1.1" & @CRLF & _
"1.1.2" & @CRLF & _
"1.2.0" & @CRLF & _
""major.minor" versioning with alpha, beta and candidate pre-releases:" & @CRLF & _
"0.9" & @CRLF & _
"1.0-a1" & @CRLF & _
"1.0-a2" & @CRLF & _
"1.0.7-b1" & @CRLF & _
"1.0.34-rc1" & @CRLF & _
"1.0" & @CRLF & _
"1.1.0-a1" & @CRLF & _
""major.minor" versioning with developmental releases, release candidates and post-releases for minor corrections:" & @CRLF & _
"0.9" & @CRLF & _
"1.0.dev1" & @CRLF & _
"1.0.dev2" & @CRLF & _
"1.0.dev3" & @CRLF & _
"1.0.dev4" & @CRLF & _
"1.0c1" & @CRLF & _
"1.0c2" & @CRLF & _
"1.0" & @CRLF & _
"1.0.post1" & @CRLF & _
"1.1.dev1" & @CRLF & _
"Date based releases, using an incrementing serial within each year, skipping zero:" & @CRLF & _
"2012.1" & @CRLF & _
"2012.2" & @CRLF & _
"2012.3" & @CRLF & _
"2012.15" & @CRLF & _
"2013.1" & @CRLF & _
"2013.2" & @CRLF & _
"The following example covers many of the possible combinations:" & @CRLF & _
"1.0.dev456" & @CRLF & _
"1.0a1" & @CRLF & _
"1.0a2.dev456" & @CRLF & _
"1.0a12.dev456" & @CRLF & _
"1.0a12" & @CRLF & _
"1.0b1.dev456" & @CRLF & _
"1.0b2" & @CRLF & _
"1.0b2.post345.dev456" & @CRLF & _
"1.0b2.post345" & @CRLF & _
"1.0rc1.dev456" & @CRLF & _
"1.0rc1" & @CRLF & _
"1.0" & @CRLF & _
"1.0+abc.5" & @CRLF & _
"1.0+abc.7" & @CRLF & _
"1.0+5" & @CRLF & _
"1.0.post456.dev34" & @CRLF & _
"1.0.post456" & @CRLF & _
"1.1.dev1"
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