当前位置: 首页 > 知识库问答 >
问题:

Java语言util。正则表达式。PatternSyntaxException:索引28附近的未关闭字符类

邹俊拔
2023-03-14
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个答案

白灿
2023-03-14

表达式无效。

结束括号将是escape,因为您在表达式中使用了“\\]”。

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

解决方案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);
    }
}
隆长卿
2023-03-14

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

 类似资料: