/
(?(DEFINE)
(?<varchar> [[:alnum:]] | [-_] )
(?<funcname> [[:alpha:]](?&varchar)* )
(?<varname> \$(?&funcname) )
(?<typepart> [[:alpha:][[:alnum:]]*)
(?<typename> \[ (?&typepart) ( \.(?&typepart) )* \] )
(?<arg> (?&typename)? \s* (?&varname) )
(?<arglist> (?&arg)