r <- "(?(DEFINE)(?<n>[-+]?\\d+(?:\\.\\d+)?)(?<a>\\s*[-+*\\/]\\s*)(?<g>\\((?:(?&n)|(?&g))(?&a)(?:(?&n)|(?&g))\\)))^(?&g)$"
x <- c("(14.0 + 46.0)", "((5.0 - 50.0) - 15.0)", "(15.0 - (5.0 - 50.0))", "(15.0 - (5.0 - 50.0)")
grep(r, x, perl=TRUE)
ciA8LSAiKD8oREVGSU5FKSg/PG4+Wy0rXT9cXGQrKD86XFwuXFxkKyk/KSg/PGE+XFxzKlstKypcXC9dXFxzKikoPzxnPlxcKCg/Oig/Jm4pfCg/JmcpKSg/JmEpKD86KD8mbil8KD8mZykpXFwpKSleKD8mZykkIgp4IDwtIGMoIigxNC4wICsgNDYuMCkiLCAiKCg1LjAgLSA1MC4wKSAtIDE1LjApIiwgIigxNS4wIC0gKDUuMCAtIDUwLjApKSIsICIoMTUuMCAtICg1LjAgLSA1MC4wKSIpCmdyZXAociwgeCwgcGVybD1UUlVFKQ==