Regex: match a non nested code block
- by Sylvanas Garde
I am currently writing a small texteditor. With this texteditor users are able to create small scripts for a very simple scripting engine.
For a better overview I want to highlight codeblocks with the same command like GoTo(x,y) or Draw(x,y).
To achieve this I want to use Regular Expresions (I am already using it to highlight other things like variables)
Here is my Expression (I know it's very ugly):
/(?<!GoTo|Draw|Example)(^(?:GoTo|Draw|Example)\(.+\)*?$)+(?!GoTo|Draw|Example)/gm
It matches the following:
lala
GoTo(5656) -> MATCH 1
sdsd
GoTo(sdsd) --comment -> MATCH 2
GoTo(23329); -> MATCH 3
Test()
GoTo(12) -> MATCH 4
LALA
Draw(23) -> MATCH 5
Draw(24) -> MATCH 6
Draw(25) -> MATCH 7
But what I want to achieve is, that the complete "blocks" of the same command are matched. In this case Match 2 & 4 and Match 5 & 6 & 7 should be one match. Tested with http://regex101.com/, the programming lanuage is vb.net.
Any advise would be very useful, Thanks in advance!