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