可能重复:
正则表达式能用来匹配嵌套模式吗?
我正在编写一个正则表达式来检查输入字符串是否为正确的算术表达式。问题在于如何检查是否有足够的开放和关闭括号。
表达式:
(1)
(((1)
((1))))
我认为前瞻和后顾在这里很有用,但目前我只能检查一种。我在使用Java,如果有影响的话。
可能重复:
正则表达式能用来匹配嵌套模式吗?
我正在编写一个正则表达式来检查输入字符串是否为正确的算术表达式。问题在于如何检查是否有足够的开放和关闭括号。
表达式:
(1)
(((1)
((1))))
我认为前瞻和后顾在这里很有用,但目前我只能检查一种。我在使用Java,如果有影响的话。
(
时,将嵌套级别增加1,当你看到)
时,将嵌套级别减少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;
}
()
,但是因为 OP 正确地请求了正确的括号匹配,所以这不会影响结果。 - wonsuc为什么不像这样计算开放和关闭括号?
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((”,并且使用此方法将被验证。