您的位置:

Java正则校验:从入门到实战

在Java中,正则表达式是一种强大的工具,用来校验和处理字符串数据。这篇文章将从入门到实战的角度,介绍Java正则表达式的基础知识和实用技巧。

一、正则表达式基础

正则表达式是一个由字符和操作符组成的模式,用来描述文本中的字串筛选规则。在Java中,可以使用java.util.regex包中的类来处理正则表达式。

1.字符匹配

String pattern = "abc";//匹配abc字符串
String str = "abc";//要匹配的字符串
System.out.println(str.matches(pattern));//true

2.字符集合

String pattern = "[abc]";//匹配a、b或c单个字符
String str = "a";//要匹配的字符串
System.out.println(str.matches(pattern));//true

3.字符数量

String pattern = "a{3}";//匹配3个a字符
String str = "aaa";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "a{2,}";//匹配2个或以上a字符
str = "aaa";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "a{2,4}";//匹配2个到4个a字符
str = "aaa";//要匹配的字符串
System.out.println(str.matches(pattern));//true

4.特殊字符

String pattern = "\\d";//匹配数字字符
String str = "1";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "\\D";//匹配非数字字符
str = "a";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "\\s";//匹配空白字符
str = " ";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "\\S";//匹配非空白字符
str = "a";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "\\w";//匹配字母数字字符
str = "a";//要匹配的字符串
System.out.println(str.matches(pattern));//true

pattern = "\\W";//匹配非字母数字字符
str = "!";//要匹配的字符串
System.out.println(str.matches(pattern));//true

二、实际应用场景

在Java开发中,正则表达式可以用于以下实际应用场景:

1.校验用户输入

//检查邮箱格式
String pattern = "[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\\.[a-zA-Z]+";
String email = "abc@test.com";
System.out.println(email.matches(pattern));//true

//检查手机号格式
pattern = "1[3456789]\\d{9}";
String phone = "13712345678";
System.out.println(phone.matches(pattern));//true

//检查身份证号格式
pattern = "[1-9]\\d{5}(18|19|20)\\d{2}(0\\d|1[012])(0\\d|[12]\\d|3[01])\\d{3}[Xx\\d]";
String idCard = "310101199001010101";
System.out.println(idCard.matches(pattern));//true

2.替换特定字符

String pattern = "<.*?>";//剔除HTML标签
String html = "

这是一段测试文本

"; System.out.println(html.replaceAll(pattern, ""));//这是一段测试文本 pattern = "(\\d{4})-(\\d{2})-(\\d{2})";//格式化日期字符串 String date = "20210101"; String result = date.replaceAll(pattern, "$1年$2月$3日"); System.out.println(result);//2021年01月01日

3.提取关键信息

String pattern = "(?<=\\()[^)\\s]+(?=\\))";//提取括号内的内容
String str = "这是一段(括号内的)测试文本";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
if (m.find()) {
    System.out.println(m.group(0));//括号内的
}

pattern = "(?=.*[a-zA-Z])(?=.*\\d)[^\\s]{8,16}";//匹配至少8个字符,并包含至少一个字母和一个数字
String password = "password1";
System.out.println(password.matches(pattern));//true

三、实战练习

接下来,带大家完成一个实际练习,校验手机号码归属地。

1.获取手机号码前7位

String phone = "13712345678";
String areaCode = phone.substring(0, 7);
System.out.println(areaCode);//1371234

2.请求接口

String url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=";
String response = HttpUtil.get(url + areaCode);
System.out.println(response);//{"mts":"1370000-1399999","province":"广东","catName":"中国移动","telString":"1371234"}

3.使用正则表达式提取信息

String pattern = "(?<=province\":\")[^\"]+(?=\")";//提取省份信息
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(response);
if (m.find()) {
    System.out.println("所在省份:" + m.group(0));//所在省份:广东
}

pattern = "(?<=catName\":\")[^\"]+(?=\")";//提取运营商信息
r = Pattern.compile(pattern);
m = r.matcher(response);
if (m.find()) {
    System.out.println("运营商:" + m.group(0));//运营商:中国移动
}

通过手机号码前7位,使用正则表达式校验手机号码归属地,并获取相关信息。