. 除换行符以外的所有字符
? 0 次或 1 次匹配
* 匹配 0 次或多次
// 前瞻: ?=
exp1(?=exp2) exp1后边是exp2就匹配
// 后顾:?>=
(?<=exp2)exp1 exp1前边是exp2就匹配
// 负前瞻:?!
exp1(?!exp2) exp1后边不是exp2就匹配
// 负后顾:?<!
(?<!exp2)exp1 exp1前边不是exp2就匹配
- 密码必须包含数字、字母、特殊符号且8位以上
注意: _ 不能写在最后
(?=.*[a-z])(?=.*\d)(?=.*[#$()=_@,.:;'"?!~%^&*+-])[a-z\d#$()=_@,.:;'"?!~%^&*+-]{8,}