#include <StringConstants.au3> ; to declare the Constants of StringRegExp
#include <Array.au3> ; UDF needed for _ArrayDisplay and _ArrayConcatenate
Local $sRegex = "(?xsm)\s* # white spaces" & @CRLF & _
"########################## KEYS START ##########################" & @CRLF & _
"(?: # We\'ll use this to make keys optional" & @CRLF & _
"(?P<keys> # named group: keys" & @CRLF & _
"\d+ # match digits" & @CRLF & _
"| # or" & @CRLF & _
""(?(?=\\\\")..|[^"])*" # match string between "", works even 4 escaped ones "hello \" world"" & @CRLF & _
"| # or" & @CRLF & _
"\'(?(?=\\\\\')..|[^\'])*\' # match string between \'\', same as above :p" & @CRLF & _
"| # or" & @CRLF & _
"\$\w+(?:\[(?:[^[\]]|(?R))*\])* # match variables $_POST, $var, $var["foo"], $var["foo"]["bar"], $foo[$bar["fail"]]" & @CRLF & _
") # close group: keys" & @CRLF & _
"########################## KEYS END ##########################" & @CRLF & _
"\s* # white spaces" & @CRLF & _
"=> # match =>" & @CRLF & _
")? # make keys optional" & @CRLF & _
"\s* # white spaces" & @CRLF & _
"########################## VALUES START ##########################" & @CRLF & _
"(?P<values> # named group: values" & @CRLF & _
"\d+ # match digits" & @CRLF & _
"| # or" & @CRLF & _
""(?(?=\\\\")..|[^"])*" # match string between "", works even 4 escaped ones "hello \" world"" & @CRLF & _
"| # or" & @CRLF & _
"\'(?(?=\\\\\')..|[^\'])*\' # match string between \'\', same as above :p" & @CRLF & _
"| # or" & @CRLF & _
"\$\w+(?:\[(?:[^[\]]|(?R))*\])* # match variables $_POST, $var, $var["foo"], $var["foo"]["bar"], $foo[$bar["fail"]]" & @CRLF & _
"| # or" & @CRLF & _
"array\s*\((?:[^()]|(?R))*\) # match an array()" & @CRLF & _
"| # or" & @CRLF & _
"\[(?:[^[\]]|(?R))*\] # match an array, new PHP array syntax: [1, 3, 5] is the same as array(1,3,5)" & @CRLF & _
"| # or" & @CRLF & _
"(?:function\s+)?\w+\s* # match functions: helloWorld, function name" & @CRLF & _
"(?:\((?:[^()]|(?R))*\)) # match function parameters (wut), (), (array(1,2,4))" & @CRLF & _
"(?:(?:\s*use\s*\((?:[^()]|(?R))*\)\s*)? # match use(&$var), use($foo, $bar) (optionally)" & @CRLF & _
"\{(?:[^{}]|(?R))*\} # match { whatever}" & @CRLF & _
")?;? # match ; (optionally)" & @CRLF & _
") # close group: values" & @CRLF & _
"########################## VALUES END ##########################" & @CRLF & _
"\s* # white spaces"
Local $sString = "0 => "a", 123 => 123, 1234, 'got problem ?', " & @CRLF & _
" "a" => $GlobalScopeVar, " & @CRLF & _
"$test_further => function test($noway){echo "this works too !!!";}, " & @CRLF & _
""yellow" => "blue"," & @CRLF & _
" "b" => array("nested"=>array(1,2,3), "nested"=>array(1,2,3),"nested"=>array(1,2,3)), " & @CRLF & _
""c" => function() use (&$VAR) { return isset($VAR) ? "defined" : "undefined" ; }," & @CRLF & _
" "bug",$var = $_POST["test];" & @CRLF & _
" "fixed", " & @CRLF & _
""mwahahahaa" => "Yeaaaah"," & @CRLF & _
"$_POST["hello"][\'world\'] => array("is", "actually", "An array !")"
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