Для соответствия этим символам:
if (str.matches("[a-zA-Z\\[\\]+\\-/*()]*")) {
...
}
Лучшая версия:
if (str.matches("\\s*\\[[a-zA-Z]+\\](\\s*[/*+-]\\s*\\[[a-zA-Z]+\\])*")) {
...
}
Поддерживать круглые скобки сложно, потому что если вы можете поместить выражения в скобки, это больше не обычный язык (это контекстно-свободный язык ). Регулярные выражения плохо подходят для сопоставления такого рода выражений. Для этого вам понадобится КПК (автомат).