All you have to do to fix this is before using expresion, do this:
if (string.IsNullOrEmpty(expression))
{
}
And by the way, you parsing (as it stands right now) is going to give you a false valid if your brackets occur out of order, even if there are enough of them. So, this:
]bracket[ blah blah blah
will report valid, just like this will:
[bracket] blah blah blah