#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?mx)# match a body pattern alone on a line" & @CRLF & _
                "^\g<body>$" & @CRLF & _
                "" & @CRLF & _
                "# we'll use (?<name>...){0} to define the pattern \g<name>" & @CRLF & _
                "# without having to match the pattern at the current position" & @CRLF & _
                "" & @CRLF & _
                "# a body pattern matches" & @CRLF & _
                "(?<body>" & @CRLF & _
                "  # a sequence of" & @CRLF & _
                "  (?: [^\[\]{}()\n]       # non-delimiters" & @CRLF & _
                "    | \g<parens>          # parenthesized pattern" & @CRLF & _
                "    | \g<square_brackets> # bracketed pattern" & @CRLF & _
                "    | \g<curly_braces>    # braced pattern" & @CRLF & _
                "  )*" & @CRLF & _
                "){0}" & @CRLF & _
                "" & @CRLF & _
                "# a parenthesized pattern matches" & @CRLF & _
                "(?<parens>" & @CRLF & _
                "  \(       # an open paren" & @CRLF & _
                "  \g<body> # a valid body" & @CRLF & _
                "  \)       # a close paren" & @CRLF & _
                "){0}" & @CRLF & _
                "" & @CRLF & _
                "# a bracketed pattern matches" & @CRLF & _
                "(?<square_brackets>" & @CRLF & _
                "  \[       # an open square bracket" & @CRLF & _
                "  \g<body> # a valid body" & @CRLF & _
                "  \]       # a close square bracket" & @CRLF & _
                "){0}" & @CRLF & _
                "" & @CRLF & _
                "# a braced pattern matches" & @CRLF & _
                "(?<curly_braces>" & @CRLF & _
                "  \{       # an open curly brace" & @CRLF & _
                "  \g<body> # a valid body" & @CRLF & _
                "  \}       # a close curly brace" & @CRLF & _
                "){0}"
Local $sString = "matches:" & @CRLF & _
                "a plain string" & @CRLF & _
                "a string containing (matched parens) [matched brackets] and {matched braces}" & @CRLF & _
                "nested (parens (within) parens)" & @CRLF & _
                "nested [parens (within) brackets]" & @CRLF & _
                "()()[({({[]})[({})]})]" & @CRLF & _
                "" & @CRLF & _
                "non-matches:" & @CRLF & _
                "(unbalanced parens" & @CRLF & _
                "([balanced but misordered)]"
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