#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?m)(?x) # free-spacing mode" & @CRLF & _
"(?(DEFINE)" & @CRLF & _
" # Within this DEFINE block, we'll define many subroutines" & @CRLF & _
" # They build on each other like lego until we can define" & @CRLF & _
" # a "big number"" & @CRLF & _
"" & @CRLF & _
" (?<one_to_9> " & @CRLF & _
" # The basic regex:" & @CRLF & _
" # one|two|three|four|five|six|seven|eight|nine" & @CRLF & _
" # We'll use an optimized version:" & @CRLF & _
" # Option 1: four|eight|(?:fiv|(?:ni|o)n)e|t(?:wo|hree)|" & @CRLF & _
" # s(?:ix|even)" & @CRLF & _
" # Option 2:" & @CRLF & _
" (?:f(?:ive|our)|s(?:even|ix)|t(?:hree|wo)|(?:ni|o)ne|eight)" & @CRLF & _
" ) # end one_to_9 definition" & @CRLF & _
"" & @CRLF & _
" (?<ten_to_19> " & @CRLF & _
" # The basic regex:" & @CRLF & _
" # ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|" & @CRLF & _
" # eighteen|nineteen" & @CRLF & _
" # We'll use an optimized version:" & @CRLF & _
" # Option 1: twelve|(?:(?:elev|t)e|(?:fif|eigh|nine|(?:thi|fou)r|" & @CRLF & _
" # s(?:ix|even))tee)n" & @CRLF & _
" # Option 2:" & @CRLF & _
" (?:(?:(?:s(?:even|ix)|f(?:our|if)|nine)te|e(?:ighte|lev))en|" & @CRLF & _
" t(?:(?:hirte)?en|welve)) " & @CRLF & _
" ) # end ten_to_19 definition" & @CRLF & _
"" & @CRLF & _
" (?<two_digit_prefix>" & @CRLF & _
" # The basic regex:" & @CRLF & _
" # twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety" & @CRLF & _
" # We'll use an optimized version:" & @CRLF & _
" # Option 1: (?:fif|six|eigh|nine|(?:tw|sev)en|(?:thi|fo)r)ty" & @CRLF & _
" # Option 2:" & @CRLF & _
" (?:s(?:even|ix)|t(?:hir|wen)|f(?:if|or)|eigh|nine)ty" & @CRLF & _
" ) # end two_digit_prefix definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_99>" & @CRLF & _
" (?&two_digit_prefix)(?:[- ](?&one_to_9))?|(?&ten_to_19)|" & @CRLF & _
" (?&one_to_9)" & @CRLF & _
" ) # end one_to_99 definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_999>" & @CRLF & _
" (?&one_to_9)[ ]hundred(?:[ ](?:and[ ])?(?&one_to_99))?|" & @CRLF & _
" (?&one_to_99)" & @CRLF & _
" ) # end one_to_999 definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_999_999>" & @CRLF & _
" (?&one_to_999)[ ]thousand(?:[ ](?&one_to_999))?|" & @CRLF & _
" (?&one_to_999)" & @CRLF & _
" ) # end one_to_999_999 definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_999_999_999>" & @CRLF & _
" (?&one_to_999)[ ]million(?:[ ](?&one_to_999_999))?|" & @CRLF & _
" (?&one_to_999_999)" & @CRLF & _
" ) # end one_to_999_999_999 definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_999_999_999_999>" & @CRLF & _
" (?&one_to_999)[ ]billion(?:[ ](?&one_to_999_999_999))?|" & @CRLF & _
" (?&one_to_999_999_999)" & @CRLF & _
" ) # end one_to_999_999_999_999 definition" & @CRLF & _
"" & @CRLF & _
" (?<one_to_999_999_999_999_999>" & @CRLF & _
" (?&one_to_999)[ ]trillion(?:[ ](?&one_to_999_999_999_999))?|" & @CRLF & _
" (?&one_to_999_999_999_999)" & @CRLF & _
" ) # end one_to_999_999_999_999_999 definition" & @CRLF & _
"" & @CRLF & _
" (?<bignumber>" & @CRLF & _
" zero|(?&one_to_999_999_999_999_999)" & @CRLF & _
" ) # end bignumber definition" & @CRLF & _
"" & @CRLF & _
" (?<zero_to_9>" & @CRLF & _
" (?&one_to_9)|zero" & @CRLF & _
" ) # end zero to 9 definition" & @CRLF & _
"" & @CRLF & _
" (?<decimals>" & @CRLF & _
" point(?:[ ](?&zero_to_9))+" & @CRLF & _
" ) # end decimals definition" & @CRLF & _
" " & @CRLF & _
") # End DEFINE" & @CRLF & _
"" & @CRLF & _
"" & @CRLF & _
"####### The Regex Matching Starts Here ########" & @CRLF & _
"^(?&bignumber)(?:[ ](?&decimals))?$" & @CRLF & _
"" & @CRLF & _
"### Other examples of groups we could match ###" & @CRLF & _
"#(?&bignumber)" & @CRLF & _
"# (?&one_to_99)" & @CRLF & _
"# (?&one_to_999)" & @CRLF & _
"# (?&one_to_999_999)" & @CRLF & _
"# (?&one_to_999_999_999)" & @CRLF & _
"# (?&one_to_999_999_999_999)" & @CRLF & _
"# (?&one_to_999_999_999_999_999)"
Local $sString = "one trillion" & @CRLF & _
"seven hundred twenty two" & @CRLF & _
"7even" & @CRLF & _
"zero point nine five" & @CRLF & _
"nine hundred ninety nine thousand two hundred thirteen"
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