正则表达式可以很方便地判断字符串格式,应用很广
使用
字符串.matches("正则表达式")
这里的正则表达式就是一个字符串
规则
字符类
[abc]
只能是a,b,c之一[^abc]
除了a,b,c以外的字符[a-zA-Z]
a到z,A到Z,闭区间[a-d[m-p]]
a到d,或m到p[a-z&&[def]]
a-z和def的交集[a-z&&[^bc]]
a-z和非bc的交集。等价于[ad-z]
[a-z&&[^m-p]]
a-z和除了m-p的交集。等价于[a-lq-z]
预定义字符
.
任何字符,除回车符号\n
\d
一个数字:[0-9]
\D
非数字:[^0-9]
\s
一个空白字符:[\t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
英文、数字、下划线:[a-zA-Z_0-9]
\W
一个非单词字符:[^\w]
\
需要转义,变成\\
数量词
X?
:X,一次或0次X*
:X,零次或多次X+
:X,一次或多次X{n}
:X,正好n次X{n,}
:X,至少n次X{n,m}
:X,至少n但不超过m次
tricks
- 匹配时忽略abc的大小写
String regex = "(?i)abc";
- 匹配时忽略b的大小写
String regex = "a((?i)b)c";
练习
从左往右依次看
- 手机号码
String regex = "1[3-9]\\d{9}";
- 座机号码
例:020-2324242
格式:区号(以0开头,有3到4位)+可以有一位分隔符(-)+号码(第一位不能是0,后面任意,总长度5-10位)
String regex = "0\\d{2,3}-?[1-9]\\d{4-9}";
- 邮箱号码
String regex = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
- 身份证严格匹配
String regex = "[1-9]\\d{5}(18|19|20)\\d{2}(0\\d|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]"