RegEx/OpenSCAD/Module.regex.txt

# Matches Open SCAD Modules
(?m) # Set Multiline mode. Then,
^module # match the literal 'module'
\s+ # and the obligitory whitespace.
(?<ModuleName>\w+) # Then match and extract the <ModuleName>.
\s{0,} # Then, there may be whitespace.
# The Module <ModuleParameters> are within ()
(?<Parameters>
\( # An open parenthesis
(?> # Followed by...
    [^\(\)]+| # any number of non-parenthesis character OR
    \((?<Depth>)| # an open parenthesis (in which case increment depth) OR
    \)(?<-Depth>) # a closed parenthesis (in which case decrement depth)
)*(?(Depth)(?!)) # until depth is 0.
\) # followed by a closing parenthesis

)\s{0,} # Then, there may be whitespace.
# The Module <ModuleDefinition> is Within {}
(?<Definition>
\{ # An open {
(?> # Followed by...
    [^\{\}]+| # any number of non-bracket character OR
    \{(?<Depth>)| # an open curly bracket (in which case increment depth) OR
    \}(?<-Depth>) # a closed curly bracket (in which case decrement depth)
)*?(?(Depth)(?!)) # until depth is 0.
\} # followed by a }

)