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

时间:2015-10-12 05:58:05

标签: java patternsyntaxexception

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);
    }
}

我在上面的代码中遇到了这种类型的异常:

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

2 个答案:

答案 0 :(得分:0)

表达式[^\\]导致正则表达式编译器崩溃(@KevinEsche在注释中注明)因为右括号]被转义。如果要创建包含\的字符类,则还需要对其进行转义,以便字符类在Java字符串中如下所示:[^\\\\]

答案 1 :(得分:0)

表达式无效。

因为在表达式中使用了'\\]',所以右括号将转义。

解决方案1:您可以像' \\\\] '这样使用。

解决方案2:您可以处理该异常,以获取如下所示的用户友好消息,

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);
    }
}