java.util.regex.PatternSyntaxException:索引28附近的未关闭字符类

java.util.regex.PatternSyntaxException:索引28附近的未关闭字符类,java,patternsyntaxexception,Java,Patternsyntaxexception,我收到上述代码的此类异常: public class samppatmatch { private boolean validatingpswwithpattern(String password){ String math="[a-zA-z0-9]+[(]+(?:[^\\]+|\\.)*"; Pattern pswNamePtrn =Pattern.compile(math); boolean flag=false;

我收到上述代码的此类异常:

public class samppatmatch {

    private boolean validatingpswwithpattern(String password){
        String math="[a-zA-z0-9]+[(]+(?:[^\\]+|\\.)*";
        Pattern pswNamePtrn =Pattern.compile(math);
        boolean flag=false;

         Matcher mtch = pswNamePtrn.matcher(password);
         if(mtch.matches()){
             flag= true;
         }

        return flag;
    }


    public static void main(String args[]){
        samppatmatch obj=new samppatmatch();
        boolean b=obj.validatingpswwithpattern("");
         System.out.println(b);
    }
}

表达式
[^\\\]
导致正则表达式编译器崩溃(@KevinEsche在注释中指出了这一点),因为结束括号
]
被转义。如果要创建包含
\
的字符类,还需要对其进行转义,以便该字符类在Java字符串中看起来像这样:
[^\\\\]

表达式无效

结束括号将被转义,因为您在表达式中使用了
'\\]'

解决方案1:您可以使用like
'\\\]'

解决方案2:您可以处理异常以获得如下用户友好消息

java.util.regex.PatternSyntaxException: Unclosed character class near index 28

您需要将
转义为
\\(
中的添加
[^\\]
没有编译,因为您转义了
]
,并且char类从未关闭。@KevinEsche实际上,根据,您不需要转义妄想症
()
在字符组内。例外情况也不是指该偏执,而是指您注意到的第二个问题(第29个字符是结束偏执
就在正则表达式末尾之前)。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class samppatmatch {

    private boolean validatingpswwithpattern(String password) {
        boolean flag = false;
        try {
            String math = "[a-zA-z0-9]+[(]+(?:[^\\]+|\\.)*";
            Pattern pswNamePtrn = Pattern.compile(math);
            Matcher mtch = pswNamePtrn.matcher(password);
            if (mtch.matches()) {
                flag = true;
            }

        } catch (PatternSyntaxException pe) {
            System.out.println("Invalid Expression");
        }
        return flag;
    }

    public static void main(String args[]) {
        samppatmatch obj = new samppatmatch();
        boolean b = obj.validatingpswwithpattern("Admin@123");
        System.out.println(b);
    }
}