在java中正则表达式就是字符串;
正则表达式的字符类
1.字符类: 用定义能出现或者不能出现哪些字符的规则
2.普通的字符串就是一个正则表达式, 但是只能表示它自身. 无法匹配一类字符串.
3.String类中有一个方法,matches(String regex), 只有把写的正则表达式放在这个方法的参数位置,才能校验一个字符串是否符合正则表示. 如果匹配返回true, 不匹配返回false;
4.正则表达式符号类写法: 使用符号是[]. 中括号中可以出现一个或多个字符. 无论中括号中出现多少个字符, 只能匹配其中的一个.
5.常用的字符类正则表达式:
[abc]: 表示a或b或c之间的一个出现就是匹配正则
[^abc]: 表示不是a或b或c之间其中一个都匹配这个正则
[0123456789]:表示数字字符中任意一个都匹配正则
[0-9]:表示数字字符中任意一个都匹配正则
[abcdefghijklmnopqrstuvwxyz]: 表示小写字母的任意一个匹配的正则
[a-z]:表示小写字母的任意一个匹配的正则
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]:表示大写字母的任意一个匹配的正则
[A-Z]:表示大写字母的任意一个匹配的正则
[^A-Z]:表示非大写字母的任意一个匹配的正则
[0-9a-z]:表示数字或者小写字母的任意一个匹配的正则
[0-9-a-zA-Z]:表示数字或者小写字母或者大写字母的任意一个匹配的正则
[^0-9-a-zA-Z]:表示非数字或者小写字母或者大写字母的任意一个匹配的正则
正则预定义字符类
1.有一些字符序列经常被使用到, 所以就在正则中使用一些特殊符号代替这些字符序列,这些符号就是预定义字符.
2.常用预定义字符:
. 点就表示任意一个字符. 只能表示一个.
只匹配一个点的正则: \. 在java中\不允许单独出现: 写\\就表示一个\
\d: 表示数字字符 等价于 [0-9]
\D: 表示数字字符 等价于[^0-9]
\w: 等价于[0-9a-zA-Z_]
\W: 等价于[^0-9a-zA-Z_]
\s: 表示空格
\S: 非空格
正则表达式中的数量词
1.无论是字符类还是预定义字符类都只能表示一个字符, 无法匹配0或者多个.所以需要使用数量词来修饰规则.
2.注释事项: 数量词只能修饰紧挨着的规则中内容出现的次数. 与前面间隔的或者数量词后面的内容无关 例如: [p][a]{5}[1] {5}就是数量词, 只能限制[a]出现次数
3.模糊数量词:
X? 表达X这个字符,能出现0次或者1次 [0, 1]
X+ 表示X这个字符, 出现1或者多次, 出现次数要大于等于1. [1 +∞)
X* 表示X这个字符, 能出现任意次 [0, +∞)
4.精确数量词
X{n}: 表示X这个字符必须出现n次.
X{n,}: 表示X这个字符至少出现n次. [n, +∞) 注意: 逗号后不要加空格
X{n,m}: 表示X这个字符出现n到m次. [n,m] 注意: 逗号后不要加空格
String类型和正则相关的三个方法
1.boolean matches(String regex) : 判断一个字符串是否符合正则表达式
2.String[] split(String regex): 把一个字符串按照正则表达式分隔若干份,存储一个String数组中返回.
3.String replaceAll(String regex, String replacement ): 把字符串中符合正则表达式regex的内容全部替换为replacement ;
练习
1.定义一个正则表达式: 用来校验一个手机号是否合法
合法手机号的规则
1.长度11位
2.首位必须是1
3.纯数字组成
4.第二位: 3,4,5,6, 7,8,9