@org.junit.Test
public void testReg() {
// 必填字母数字特殊字符
String reg = "^(?![0-9]+$)(?![^0-9]+$)(?![a-zA-Z]+$)(?![^a-zA-Z]+$)(?![a-zA-Z0-9]+$)[a-zA-Z0-9\\S]+$";
System.out.println("123".matches(reg));
System.out.println("123@@".matches(reg));
System.out.println("zzzzzzzzzzz".matches(reg));
System.out.println("zzzzzzzz@@zzz".matches(reg));
System.out.println("sss123".matches(reg));
System.out.println("sgg123@@$@".matches(reg));
System.out.println("sgg@123".matches(reg));
System.out.println("sgg@.".matches(reg));
}
常见语法:
^匹配正则的起始位置;
$截止位置;
\\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v];
(?![0-9]+$)不全是数字;
[a-zA-Z][a-zA-Z0-9\\S]必须以英文字母开始;
+出现次数大于等于1;
*出现次数大于0;
剩下的就是逻辑了,自己推算下。
真正的强大扩展还得依靠你自己去写,懂得了语法,写出来想要的自然不是问题了
推荐个正则表达式语法:http://www.runoob.com/regexp/regexp-syntax.html
规则写完还是存在很多优化点,欢迎交流