第1章 正则表达式

1.1 正则表达式

在开发中,通常很多数据都会使用String类存储。原因:操作字符串的功能比较多,比较方便。

在操作String类对象时,会经常遇到对字符串进行验证的功能,而按照我们之前学习的String类,我们使用String类中的诸多函数是可以完成对字符串校验功能的,但是代码相对来说比较麻烦,所以在Java中引入正则表达式的概念来解决上述问题,即简化代码。

正则表达式:专门用于操作字符串的技术,并且可以简化代码,用于对字符串的复杂操作。

正则表达式弊端:代码可读性比较差。

1.1.1 验证

案例1:

需求:验证QQ号码是否合法。

分析:

1、第一位不能是零;

2、QQ号码在5到12之间(包含);

​3、QQ号码都是由数字组成;

说明:

1、String类中提供一个matches()函数,可以判断字符串对象是否匹配正则表达式。
前端-正则表达式(扩展)-LMLPHP

​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 切割

前端-正则表达式(扩展)-LMLPHP

需求:使用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次;**

07-21 21:01