split by semi-colons not found between opening and closing brackets
If the brackets are always balanced and you want to split you can use a regex like:
;(?![^][]*\])
In PHP written something like:
$fields = preg_split('/;(?![^][]*\])/', $line);