正则表达式(应用篇)

上一篇内容介绍了正则表达式的一些语法内容,本篇介绍一些实际应用并详细介绍一下每一个细节的功能。

1、手机号

地址字符串:13651595997

正则表达式:^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$

详细解释:

^代表字符串起始位置,$代表字符串结束位置,就是说所用字符串必须完全匹配当前表达式,不能有多余内容

前面的大红框是一个聚合表达式,| 是或的意思。

13[0-9]意思是前两个字符是13,第三个字符可以是0-9任意一个。

14[5|7]意思是前两个字符是14,第三个字符可以是5或7。

\d是匹配一个数字字符。等价于 [0-9],\d{8}就是连续8位字符是数字。

2、邮箱

 地址字符串:abcd testqwe@asdfgh.com 1234

正则表达式:\b[\w\.%+-]+@[\w\.-]+\.[a-zA-Z]{2,6}\b

详细解释:

每一个红框代码一个单元或者说一个子表达式,根据这个规则匹配字符串,

\b代表空格

[\w\.%+-]代表字符必须是字母、数字、下划线、.、%、+、-

[\w\.%+-]+代表连续1个或多个字符必须是字母、数字、下划线、.、%、+、-

[a-zA-Z]{2,6}代表连续2到6个字符必须是小写a-z或大写A-Z

Java代码

    public static void main(String[] args) {
		String paramString = "abcd testqwe@asdfgh.com 1234";
		String regexString = "\\b[\\w\\.%+-]+@[\\w\\.-]+\\.[a-zA-Z]{2,6}\\b";
		Pattern pattern = Pattern.compile(regexString);
		Matcher matcher = pattern.matcher(paramString);
		if(matcher.find()) {
			System.out.println(matcher.group());
		}
	}

输出结果:testqwe@asdfgh.com

3、日期年月日时分秒

地址字符串:2021-07-04

正则表达式:^[1-9][0-9]{3}\-((0[1-9])|(1[0-2]))\-((0[1-9])|([1-2][0-9])|(3[0-1]))$

详细解释

[1-9]限定的是年份第一个字符,第一个字符不能是0

[0-9]{3}限定的是年份后3个字符

((0[1-9])|(1[0-2]))限定月份,1-9月第一个字符为0,所有用0[1-9],10-12月用1[0-2]

((0[1-9])|([1-2][0-9])|(3[0-1]))限定日,1-9日用0[1-9],10-29日用[1-2][0-9],30-31日用3[0-1],在这里日的限定不是非常合理,因为月份不一样日的个数也不一样,这里只是用来举例的。

4、URL地址

地址字符串:http://www.test.com:80/html/html-abcdefg.html

正则表达式:^(https|http|ftp|file)://([^/:]+)(:\d*)?([^# ]*)$

详细解释

(https|http|ftp|file)代表起始是https或http或ftp或file

://不用说,原样字符匹配

[^/:]代表字符匹配非斜杠和冒号,[^/:]+则是匹配连续多个非斜杠和冒号的字符

:\d*,:冒号,原样字符匹配;\d为数字,\d*则是匹配连续多个数字字符

?代表匹配0或一次,所以(:\d*)?就是将表达式(:多个数字)匹配0次或多次,那么就是:80这里可以没有任何内容的

[^# ]代表字符匹配非#号和空字符串,[^# ]*则是匹配连续多个非#号和空字符串的字符。(注意看,[^# ]的#后面是一个空字符串,不是紧跟]的)

public static void main(String[] args) {
		String paramString = "http://www.test.com:80/html/html-abcdefg.html";
		String regexString = "^(https|http|ftp|file)://([^/:]+)(:\\d*)?([^# ]*)$";
		Pattern pattern = Pattern.compile(regexString);
		Matcher matcher = pattern.matcher(paramString);
		if(matcher.find()) {
			for(int i=0;i<matcher.groupCount()+1;i++) {
				System.out.println(matcher.group(i));
			}
		}
	}

输出结果
http://www.test.com:80/html/html-abcdefg.html
http
www.test.com
:80
/html/html-abcdefg.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值