CSDN标题不允许打<符号....
其实我的标题是: Java 正则?= ,?! ,?<= ,?<!的用法
String password="Windows";
String regex="^(?=W)\\w+(?<=s)$";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(password);
boolean isMatch=m.matches();
System.out.println(isMatch);
String password2="Windows";
String regex2="^\\w{1}(?=i)\\w+$";
Pattern p2=Pattern.compile(regex2);
Matcher m2=p2.matcher(password2);
boolean isMatch2=m2.matches();
System.out.println(isMatch2);
String password3="Windows";
String regex3="^(?!a)\\w+(?<!a)$";
Pattern p3=Pattern.compile(regex3);
Matcher m3=p.matcher(password3);
boolean isMatch3=m.matches();
System.out.println(isMatch3);
String password4="Windows";
String regex4="^\\w{1}(?!a)\\w+$";
Pattern p4=Pattern.compile(regex4);
Matcher m4=p4.matcher(password4);
boolean isMatch4=m4.matches();
System.out.println(isMatch4);
打印结果:
(?=params)表示正序的该位必须匹配params
(?!params)表示正序的该位必须不匹配params
(?<=params)表示用在末尾必须匹配params
(?<!params)表示用在末尾必须不匹配params
来看一个复杂的密码匹配:
6-16位数字字母混合,不能全为数字,不能全为字母,首位不能为数字
public boolean isPassword(String password){
String regex="^(?![0-9])(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(password);
boolean isMatch=m.matches();
Log.i(TAG, "isPassword: 是否密码正则匹配"+isMatch);
return isMatch;
}
RuntimeTest runtimeTest=new RuntimeTest();
runtimeTest.isPassword("abcABC123");
runtimeTest.isPassword("abcdefg123456789");
runtimeTest.isPassword("abcABC");
runtimeTest.isPassword("123456");
runtimeTest.isPassword("123abcABC");
查看打印结果: