Java正则表达式未闭合字符类(PatternSyntaxException)

Java正则表达式未闭合字符类(PatternSyntaxException),java,regex,Java,Regex,我在编译正则表达式时遇到问题。我找不到这个表达式有什么问题,因为我是从Cisco文档中得到的,我不明白为什么它不起作用。我希望有人能告诉我它出了什么问题。这就是我想做的: public void test(){ try{ pattern.compile("^[]0-9*#X[^-]{1,50}$"); System.out.println("Syntax is ok"); } catch (PatternSyntaxException e) {

我在编译正则表达式时遇到问题。我找不到这个表达式有什么问题,因为我是从Cisco文档中得到的,我不明白为什么它不起作用。我希望有人能告诉我它出了什么问题。这就是我想做的:

public void test(){
    try{
        pattern.compile("^[]0-9*#X[^-]{1,50}$");
        System.out.println("Syntax is ok");
    } catch (PatternSyntaxException e) {
        System.out.println(e.getDescription());
    }
}
这:

不起作用,您必须将
[]0-9
替换为
[0-9]

^[0-9]*#X[^-]{1,50}$
更新

正如Duncan Jones所说,也许您希望匹配字符串开头的
[]
。在这种情况下,您必须成为正则表达式

^\[\]0-9*#X[^-]{1,50}$
因此:


这当然消除了错误。我想OP可以确认这是否是我们想要的。例如,这也会删除错误:
“^\\[\\]0-9*\\[^-]{1,50}$”
。非常感谢各位,避开了我不知道它们被视为特殊字符的[和]。我正在尝试匹配一个电话号码,我从Cisco data Dictionary()获得了正则表达式,以防您对它的用途感到好奇。模式的开头是
[]
。是否要搜索这些文字字符?即一个开放的方括号和一个封闭的方括号?如果是这样的话,你需要避开它们:
\\[\\]
。有很多方法可以修复这个模式。但我们不知道你想匹配什么,所以任何答案都只是猜测。我投票决定太本地化了。不清楚最初的问题是什么,所以我不确定答案对OP以外的人有用。
^\[\]0-9*#X[^-]{1,50}$
pattern.compile("^\\[\\]0-9*#X[^-]{1,50}$");