介绍
这段时间使用Java的正则表达式做一些字符串匹配的任务,现将学到的正则表达式的知识整理成文。
Java中Spring.class涉及到正则表达式。如Spring.split(), matches(),replaceAll()等方法。
Java中一般使用正则表达式的方式是利用Pattern.class和Matcher.class,所在package为java.util.regex。
该篇主要针对字符进行总结,如下是构造正则表达式的常用字符
字符类 | 描述 |
---|---|
\ | 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n"匹配字符"n”。"\n"匹配换行符。序列"\“匹配”","(“匹配”("。 |
^ | 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。 |
. (小数点) | 任意字符 |
[abc] | [ ] 中括号,包含a,b,c中任意字符 |
[^abc] | [ ]中括号加^, 表示否定,除a,b,c之外的 |
[a-z] | 从a到z的任意字符 |
[a-z&&[hi]] | &&表示交集,即包含h或i |
\s | 空白字符,包含空格,换行,回车,tab,换页 |
\S | 大写为小写的取反,非空白字符,等价于[^\s] |
\d | 数字0-9 |
\D | 非数字,等价于[^0-9] |
\w | 词字符,数字,大小写字母,等价于[0-9a-zA-Z] |
\W | 非词,等价于[^\w] |
密码剖析
如一般是对密码和手机号进行校验,现在根据密码常用的校验方法来说明:
1.密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
(?=.*\\d)
指数字0-9,(?=.*[a-z])
指英文小写,(?=.*[A-Z])
指英文大写,.{8,10}
指长度在8-10之间
String regex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$";
自定义密码规则
1.自定义密码规则,8-25位必须且仅含数字、字母大小写、特殊字符三种或以上:
长度在8-25位.{8,25}
,数字(?=.*\\d)
,字母大小写(?=.*[a-z])
、(?=.*[A-Z])
,特殊字符(?=.*\\W)
,以上就是这次规则的组成部门
这里又四种密码规则,但只要满足其中三种就行,所以要把可以满足要求的规则列出来。
1.数字和英文大小写:(?=.*\d)(?=.*[a-z])(?=.*[A-Z])
2.数字特殊字符和英文大写或小写:(?=.*\d)(?=.*\\W)(?=.*[a-zA-Z]
3.特殊字符和英文大小写:(?=.*\\W)(?=.*[a-z])(?=.*[A-Z])
4.将上列满足要求的规则并起来为:
((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))|((?=.*\d)(?=.*\\W)(?=.*[a-zA-Z]))|(?=.*\\W)(?=.*[a-z])(?=.*[A-Z])
所以我们这次的自定义密码规则为:
String regex = "^(((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))|((?=.*\d)(?=.*\\W)(?=.*[a-zA-Z]))|((?=.*\\W)(?=.*[a-z])(?=.*[A-Z]))).{8,25}$";