JavaSE进阶之Regex:正则表达式
1.用途
正则表达式用于输入字符串的校验,可极大简化代码的书写,经常应用于用户输入比如电话、邮箱、身份证号等内容的校验,属于Java开发必学内容。
2.用法
将字符串的限定规则Rule写成字符串形式,字符串的内容是正则表达式。被校验字符串Str调用String类的成员方法boolean mathces(String Regex),将Rule传入,可对Str进行校验。校验成功返回true,否则返回false。
相对于普通的逻辑判断“1.字符串长度在(6,20)中;2.字符串内容是数字”,显得非常简洁。
3.正则表达式中符号的含义
为了解正则表达式的使用,必须知道其中的符号对应的含义。
3.1单个字符的匹配规则1:字符类C
用中括号[]将字符围起来,表示被比较字符的该位置处必须是中括号中的内容。如[a]表示该位置处必须是字符a。
[]中的字符可以有多个,由此产生如下规则(直接举例说明含义):
[abc]是一个字符,表示只能是a,b,c其中一个
[^abc]表示非a且非b且非c,即对[abc]数学逻辑上取反
[a-d]表示a,b,c,d其中任意一个
[a-zA-Z]表示是a到z或A到Z其中一个,即26个字母之一,不同类型(大小写)可用[]进行分离,但含义不变,[a-zA-Z]=[a-z[A-Z]]
[a-d&&[^c]]表示a,b,d其中一个,对c进行了排除,&&:且
[a-d&&[^b-c]]表示a,d,对b,c进行了排除。
-和&&的作用范围是其本身左右两边的内容,^的作用范围是其本身右边的内容,[]表示一个已完成的表达式,[]可以进行嵌套使用,如[a-d&&[^b-c]]。
3.2单个字符的匹配规则2:预定义类Y
.匹配任意字符
d 表示[0-9],即一个数字
D表示[^0-9],即非数字
s表示空白字符,即空格
S表示非空格
w表示当前字符属于英文、数字和下划线其中的一类,即单词
W表示非单词字符
3.3贪婪量词(对单个字符的个数进行校验)
上述两类都是对字符的内容进行校验,贪婪量词则对字符出现的次数进行了校验。
设已有单个字符的匹配规则X,X取C或者Y(即前面两类),X出现的次数为count有如下定义
X? 表示1次或0次,即count∈{0,1}
X* 表示0次或无数次,即count∈[0,+∞}
X+ 表示一次或多次,即count∈[1,+∞}
X{n} 表示正好n次,即count=n
X{n,}表示至少n次,即count∈[n,+∞)
X{m,n}表示至少m但不超过n,即count∈[m,n)
特殊字符 . 和 需要在符号前加上斜杠进行转义,否则不生效.
