Regexp检查括号是否平衡

gra*_*can 8 java regex

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

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

表达式:

  1. (1)

  2. (((1)

  3. ((1))))

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

Mar*_*ers 9

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

最初嵌套为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;
}
Run Code Online (Sandbox Code Playgroud)


Han*_*Gay 4

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