正则表达式可以很方便地判断字符串格式,应用很广
使用
字符串.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]"