2015-10-12 3 views
0
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: незавершенная класс символов рядом с индексом 28

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

вам нужно избежать '(' as '\\ (' – SomeJavaGuy

+2

В дополнении' [^ \\] 'не компилируется, потому что вы избегаете' '' и класс char никогда не закрывается. – SomeJavaGuy

+0

@KevinEsche Собственно, согласно [regex101] (https://regex101.com/r/iP4zT5/1), вы не _need_, чтобы избежать paranthesis '()' внутри группы символов. Исключение также не относится к этой парантезе, а скорее к второй проблеме, которую вы отметили (29-й символ - это закрывающая paranthesis ') 'прямо перед концом регулярного выражения). – mezzodrinker

ответ

0

Выражение [^\\] вызывает регулярное выражение компилятор врезаться (@ KevinEsche отметил, что в комментарии), потому что закрывающая скобка ] была сбежала. Если вы хотите создать класс символов, содержащий \, вам необходимо также избежать его, чтобы класс символов выглядел следующим образом в строке Java: [^\\\\]

Смежные вопросы