求一个Java正则表达式

[code="java"]
public class Test {

public static final String REGEXP_PATTERN = "^[0-9\\*TSPx\\.\\|\\(\\)\\[\\]\\{\\}~,\\\\]+$";

public static void main(String[] args) {
    String name = "[[[[[[[[[[";
    if (!name.matches(REGEXP_PATTERN)) {
        System.out.println("contains invalid characters. ");
    } else {
        System.out.println("Pass");
    }

}

}
[/code]
‘((((((((’, ‘[[[[[[[[’, ‘{{{{{{{{’, ‘()()()()’, ‘[][][][]’, ‘{}{}{}{}’

在我的正则基础上修改 以上的字符不能通过验证

[code="java"]import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

public static final Pattern REGEXP_PATTERN = Pattern.compile("(\\(.*\\))|(\\[.*\\])|(\\{.*\\})");

public static void main(String[] args) {
    String name = "(()()()(()))  ]]]]]]]  [[]]";

    System.out.println(matches(name, null));
}

public static boolean matches(String value, Map<String, AtomicInteger> counter) {

    if(counter == null) {
        counter = new HashMap<String, AtomicInteger>();
        counter.put("(", new AtomicInteger(0));
        counter.put("[", new AtomicInteger(0));
        counter.put("{", new AtomicInteger(0));
    }

    int valueLength = value.length();
    Matcher matcher = REGEXP_PATTERN.matcher(value);
    while(matcher.find()) {
        String group = matcher.group();
        System.out.println("matches:" + group);

        if(group.length() > 0) {
            String prefix = group.substring(0, 1);
            AtomicInteger count = counter.get(prefix);
            if(count != null) {
                count.incrementAndGet();
            }
        }
        for(AtomicInteger count : counter.values()) {
            if(count.get() > 1) {
                return false;
            }
        }
        matches(group.substring(1, group.length()-1), counter);
    }
    return true;
}

}
[/code]

你试一下 使用嵌套做的 可能效率不是很高

为什么非要用正则呢?可以换种方式更简单,用栈结构,很简单,如果成对,肯定有一对是对着呢!先入栈,在找到匹配的依次出栈,可以正确出栈,且栈中的数据位空时就匹配