正则表达式检查括号是否平衡

可能重复:
正则表达式可以用于匹配嵌套模式吗?

我正在编写一个regexp来检查输入字符串是否是正确的算术表达式。 问题是检查是否有足够的开括号和右括号。

表达式:

  1. (1)

  2. (((1)

  3. ((1))))

我认为前瞻和后视在这里很有用但是现在我只能检查一种。 我正在使用Java,如果重要的话。

您不应该使用正则表达式来执行此操作。 相反,您可以逐个字符地迭代字符串并跟踪嵌套级别。

最初嵌套为0.当您看到(将嵌套增加1,当您看到)减少嵌套。 如果最终嵌套为0并且嵌套永远不会低于0,则表达式会正确平衡。

 public static boolean checkParentheses(String s) { int nesting = 0; for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i); switch (c) { case '(': nesting++; break; case ')': nesting--; if (nesting < 0) { return false; } break; } } return nesting == 0; } 

您需要使用解析器来执行此操作,而不是正则表达式。 看到这个问题 。

为什么不算这样的开始和结束的parens?

 String expression = "((1+x) - 3 * 4(6*9(12+1)(4+(2*3+(4-4)))))"; int open = 0; for(int x = 0; x < open; x++){ if(expression[x] == '(') open++; else if(expression[x] == ')') open--; } if (open != 0) // Not a valid expression 

当然这只会检查你有合适的金额 - 有人可以写'))3 * 4(('并且它将使用这种方法进行validation。