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