Bueno, he encontrado este problema bastantes veces, lo que me llevó a escribir mi propio sistema para analizar cualquier tipo de sintaxis.
El resultado de esto se puede encontrar here; tenga en cuenta que esto puede ser excesivo, y le proporcionará algo que le permite analizar enunciados con corchetes y paréntesis, comillas simples o dobles, tan anidados como desee. Por ejemplo, se podría analizar algo como esto (ejemplo escrito en Common Lisp):
(defun hello_world (&optional (text "Hello, World!"))
(format t text))
Puede utilizar el agrupamiento, soportes (cuadrados) y paréntesis (redondos), de una y cadenas entre comillas dobles, y es muy extensible.
La idea es básicamente una implementación configurable de una máquina de estados finitos que construye un árbol de sintaxis abstracto carácter por carácter. Te recomiendo que mires el código fuente (ver enlace arriba), para que puedas hacerte una idea de cómo hacerlo. Es capaz a través de expresiones regulares, pero intente escribir un sistema utilizando RE y luego tratar de extenderlo (o incluso entenderlo) más tarde.
¿Anidan los soportes? ¿Puede haber corchetes sin igual entre comillas? ¿Qué hay de las comillas o corchetes sin igual? ¿Cuál es el resultado correcto para lo siguiente: [[paréntesis anidados] prueba] "sujetador [entre comillas" "ket] entre comillas" [cita "entre paréntesis]"] –