正则表达式的引入
字符
x x字符\\ 反斜线字符
\t 制表符
\n 换行符
\r 回车符
字符类:
[abc] a、b 或 c(简单类)[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
预定义字符类:
. 任何字符 如果本身就是. \. qq.com 写正则表达式(\\.)
\d 数字:[0-9] 写正则表达式 :\\d
\w 单词字符:[a-zA-Z_0-9]:字母大小写,数字字符 \\w
边界匹配器:
^ 行的开头
$ 行的结尾
\b 单词边界 尾 (helloword?haha:world)
Greedy 数量词(重点)
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X字符恰好出现n次
X{n,} X字符至少出现n次
X{n,m} X字符至少出现n次,但不超过m次
我们可以通过一段功能代码引入正则表达式
需求:键盘录入一个qq号码,需要校验QQ号码
要求: 1)5~15的数字组成
2)不能以0开头
分析:
1)键盘录入一个QQ号码
2)写一个校验的功能 ,返回值是boolean
3)在里面针对表达式进行判断
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//接收数据
System.out.println("请输入一个QQ号码:");
String QQ = sc.nextLine() ;
//调用校验的功能
boolean flag = checkQQ(QQ) ;
System.out.println(flag);
}
//定义一个静态方法,返回值类型是boolean类型
public static boolean checkQQ(String qq) {
//假设 :返回值是true
boolean flag = true ;
//进行判断
//1) 5-15的
if(qq.length()>=5 && qq.length()<=15) {
//符合了长度之后,并且不能以0开头
if(!qq.startsWith("0")) {
//符合了之后,但是否是数字
//将字符串转换成字符数组
char[] chs = qq.toCharArray() ;
//遍历
for(int x = 0 ; x <chs.length ; x ++) {
//获取到每一个字符
char ch = chs[x] ;
//在for循环中判断是否是数字:Character 有一个方法:isDigit()
if(!Character.isDigit(ch)) {
flag = false ;
break ;
}
}
}else {
flag = false ;
}
}else {
flag = false ;
}
return flag ;
}
我们可以看到,通过以上方法就可以判断一个QQ号是否是我们需要的,但是代码太过冗长,很麻烦!因此,我们引入正则表达式。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ;
//接收数据
System.out.println("请输入一个QQ号码:");
String QQ =sc.nextLine() ;
boolean flag = checkQQ(QQ) ;
System.out.println(flag);
}
public static boolean checkQQ(String qq) {
//定义正则规则
/*String regex= "[1-9][0-9] {4,14}" ;
//public static boolean matches(String regex) :
//检验我们的字符串数据是否和正则规则匹配,如果匹配成功则返回true
boolean flag = qq.matches(regex) ;
return flag ;*/
//改进
return qq.matches("[1-9]\\d{4,14}") ;
}
[1-9]限制第一个数字不能以0开头;
\\d代表[0-9]的任意数字
{4,14}因为一共是15个数字,第一个数字已经限制过,之后的数字长度不能小于4个,不能大于14个数字。
我们可以明显的看到,通过正则表达式,可以极大的使代码得到优化。
我们可以再写一个校验邮箱的正则表达式
919081924@qq.com
zhangsan@163.com
xibukaiyuan@westos.com.cn
这些类型的邮箱都可以通过正则表达式进行校验
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc =new Scanner(System.in) ;
//接收数据
System.out.println("请输入一个邮箱:");
String email = sc.nextLine() ;
//定义正则规则
//String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]+){1,4}" ;
String regex = "\\w+@\\w{2,6}(\\.\\w+){1,4}";
boolean flag = email.matches(regex) ;
System.out.println("flag:"+flag);//两种方式都可以