第1章 正则表达式
1.1 正则表达式
在开发中,通常很多数据都会使用String类存储。原因:操作字符串的功能比较多,比较方便。
在操作String类对象时,会经常遇到对字符串进行验证的功能,而按照我们之前学习的String类,我们使用String类中的诸多函数是可以完成对字符串校验功能的,但是代码相对来说比较麻烦,所以在Java中引入正则表达式的概念来解决上述问题,即简化代码。
正则表达式:专门用于操作字符串的技术,并且可以简化代码,用于对字符串的复杂操作。
正则表达式弊端:代码可读性比较差。
1.1.1 验证
案例1:
需求:验证QQ号码是否合法。
分析:
1、第一位不能是零;
2、QQ号码在5到12之间(包含);
3、QQ号码都是由数字组成;
说明:
1、String类中提供一个matches()函数,可以判断字符串对象是否匹配正则表达式。
1)如果匹配,则返回true;
2)如果不匹配,则返回false;
2、 [1-9]:表示字符串中第一位能够出现1~9任何一个数字;
3、 [0-9]{4,11}:表示字符串中从第2位开始后面的数字只能出现0~9之间的数字,并且最少出现4次,最多出现11次;
4、 如果满足上述条件则返回true,否则返回false
上述案例代码如下:
package cn.itcast.sh.a_regex_demo;
/*
* 需求:验证QQ号码是否合法。
分析:
1、第一位不能是零;
2、QQ号码在5到12之间(包含);
3、QQ号码都是有数字组成;
*/
public class RegexDemo {
public static void main(String[] args) {
method_1();
}
// 使用正则表达式完成QQ号码的验证
private static void method_1() {
// 定义一个字符串变量
String QQ = "12345";
/*
* String类中提供一个matches()函数,可以判断字符串对象是否匹配正则表达式
* 如果匹配,则返回true
* 如果不匹配,则返回false
* [1-9]:表示字符串中第一位能够出现1~9任何一个数字
* [0-9]{4,11}:表示字符串中从第2位开始后面的数字只能出现0~9之间的数字,并且最少出现4次,最多出现11次
* 如果满足上述条件则返回true,否则返回false
*/
boolean flag = QQ.matches("[1-9][0-9]{4,11}");
System.out.println(flag);
}
}
说明:
1)在正则中[]表示在某一位字符串中出现的范围;
2)在正则中{}表示前面离他最近的前面的正则出现的次数;
注意:正则表达式只能使用在字符串上。
案例2:需求:验证手机号码
分析:手机号码的规则:
1)长度必须是11位;
2)第一位只能是数字1;
3)第二位可以是3 4 5 7 8;
4)从第三位开始可以是0-9
步骤:
1)定义一个RegexDemo1类,在这个类中定义一个主函数main;
2)在main函数中定义一个String类型的变量tel,并赋值为15066668888;
3)定义一个手机号码的正则规则regex=”1[34578][0-9]{9}”;
4)使用字符串变量tel调用String类中的matches()函数,regex正则规则作为参数进行传递,打印结果;
package cn.itcast.sh.a_regex_demo;
/*
* 需求:验证手机号码
分析:手机号码的规则:
1)长度必须是11位;
2)第一位只能是数字1;
3)第二位可以是3 4 5 7 8;
4)从第三位开始可以是0-9
*/
public class RegexDemo1 {
public static void main(String[] args) {
// 定义一个字符串
String tel = "15066668888";
// 定义一个手机号的正则
String regex = "1[34578][0-9]{9}";
// 使用字符串对象tel调用String类中的matches函数,判断字符串是否匹配正则表达式
System.out.println(tel.matches(regex));
}
}
1.1.2 切割
需求:使用String类中的split函数根据正则表达式规则,以数字对已知的字符串进行切割。
1)定义RegexDemo2 类;
2)在这个类中定义一个字符串str,并赋值为”sfajs12321dbfj234d23sjfk454sdjf565sdhd757hf”;
3)定义一个正则表达式规则:regex=”[0-9]+”;
4)使用定义好的字符串str调用split()函数按照正则表达式进行切割;
5)遍历切割后的数组;
package cn.itcast.sh.a_regex_demo;
/*
* 需求:使用String类中的split函数根据正则表达式规则,以数字对已知的字符串进行切割。
1)定义RegexDemo2 类;
2)在这个类中定义一个字符串str,并赋值为”sfljs12321dlfj234d23sjfk454sdjf565sdhd757hf”;
3)定义一个正则表达式规则:regex=”\\d+”;
4)使用定义好的字符串str调用split()函数对正则表达式进行切割;
5)遍历切割后的数组;
*/
public class RegexDemo2 {
public static void main(String[] args) {
// 定义一个字符串
String str = "sfajs12321dbfj234d23sjfk454sdjf565sdhd757hf";
// 定义一个正则表达式,以数字对上述字符串进行切割{"sfajs","dbfj","d","sjfk"}
String regex = "\\d+";
String[] strs = str.split(regex);
// 遍历数组
for (int i = 0; i < strs.length; i++) {
// 打印数组中的数据
System.out.println(strs[i]);
}
}
}
说明:
1)在正则中\d就是数字[0-9];
2)在正则中+ 表示1 n次, 表示0 1 n次,? 表示0 1次;*
for (int i = 0; i < strs.length; i++) {
// 打印数组中的数据
System.out.println(strs[i]);
}
}
}
说明:
1)在正则中\\d就是数字[0-9];
**2)在正则中+ 表示1 n次,* 表示0 1 n次,? 表示0 1次;**