What platform are you using? Is this part of a replacement operation or just matching?
This worked for me in PHP:
Raw Match Pattern:
(\[(?:(?>[^\[\]]+)|(?1))*\])
Note that you will need to do a second test to match only the Text: matches returned.
Note that another acceptable pattern for this nested [ ] matching would have also been:
Raw Match Pattern:
\[(?:(?>[^\[\]]+)|(?R))*\]
However the pattern above using (?1) allows for the use of lookbehinds etc.