Java正则表达式基础语法与常用实例详解
Java正则表达式广泛应用于文本模式匹配与处理。本文梳理基本语法规则,并通过手机号校验、年龄分割、数字替换等具体代码示例,展示如何利用matches、split和replaceAll方法实现高效的字符串操作。
一、核心语法与基础规则
正则表达式通过特定字符组合描述字符串的规则模式。在Java中使用前需了解以下关键符号:
第1步:掌握基础字符匹配符号
目的:理解如何定位单个或一组字符。
.点号:匹配除换行符以外的任意单个字符。例如t.o可匹配tno、t#o,但不匹配to(少一个字符)或tnno(多一个字符)。[]方括号:匹配括号内指定的任意单个字符。如t[abcd]n仅匹配tan、tbn等。|竖线:表示“或”的关系。如t(a|b|c)nn匹配tan、tbn等,但不能匹配混合序列如tabcn。[^...]否定字符类:匹配不在括号内的任意字符。例如[^x]匹配除了x以外的首个字符。
第2步:使用量词控制匹配次数
目的:精确控制前面元素出现的频次。
{n}:正好匹配 n 次。如日期格式中的年份部分。*:匹配 0 次或多次(等价于{0,})。+:匹配 1 次或多次(等价于{1,})。?:匹配 0 次或 1 次(等价于{0,1})。
注意:当特殊符号(如连字符 -)需要作为普通字符使用时,必须添加转义符 \。
第3步:应用快捷符号提升可读性
目的:使用预定义类简化常见模式的编写。
\d:等同于 [0-9],匹配数字。\D:等同于 [^0-9],匹配非数字。\w:等同于 [A-Za-z0-9_],匹配单词字符(字母、数字、下划线)。\W:等同于 [^A-Za-z0-9_],匹配非单词字符。\s:匹配空白字符(空格、制表符、换页符等)。\S:匹配非空白字符。
二、Java中的三大应用场景
Java的 String 类提供了直接支持正则的方法,主要应用于校验、拆分和替换任务。
第4步:利用 matches() 进行精准校验
入口:String.matches(String regex)。
动作:验证字符串是否完全符合给定规则。
案例:校验手机号码是否为13或18开头,后接9位数字。
package Lemon;
import java.util.Scanner;
public class RegexDemo {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号码:");
String s = sc.nextLine();
// 定义规则:1开头,第二位为3或8,后续紧跟9位数字
String regex = "1[38]\\d{9}";
boolean flag = s.matches(regex);
System.out.println("匹配成功: " + flag);
}
}
第5步:利用 split() 按规则拆分字符串
入口:String.split(String regex)。
动作:根据正则表达式将字符串切割为数组。
案例:将年龄范围字符串 "18-24" 拆分为整数区间进行判断。
package Lemon;
import java.util.Scanner;
public class RegexDemo {
public static void main(String[] args){
String ageRange = "18-24";
// 以减号为分隔符
String[] strArr = ageRange.split("-");
int startAge = Integer.parseInt(strArr[0]);
int endAge = Integer.parseInt(strArr[1]);
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄:");
int a = sc.nextInt();
if (a >= startAge && a <= endAge){
System.out.println("符合年龄要求");
} else {
System.out.println("不符合要求");
}
}
}
第6步:利用 replaceAll() 执行内容替换
入口:String.replaceAll(String regex, String replacement)。
动作:查找所有匹配正则的子串并替换为目标文本。
案例:将所有数字替换为星号,常用于数据脱敏。
package Lemon;
public class RegexDemo {
public static void main(String[] args){
String s = "12342jasfkgnas234";
// 匹配任意数字 \d
String result = s.replaceAll("\\d", "*");
System.out.println(result); // 输出: *****j*********2***
}
}
三、高频业务场景正则速查
以下为开发中常见的验证正则模板,建议结合上下文进行测试:
- 账号类:
- 由字母、数字组成:^[a-zA-Z0-9]+$
- 字母开头,5-16字节,含数字下划线:^[a-zA-Z][a-zA-Z0-9_]{4,15}$
- QQ号(5-15位数字,非0开头):^[1-9]\d{4,14}$ - 联系信息:
- 手机号(国内13/15/18等段):^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
- Email地址:^([\w-]+\.)+@([\w-]+\.)+[a-z]{2,4}$
- URL网址:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ - 数值类型:
- 正浮点数:^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
- IP地址:^(\d+)\.(\d+)\.(\d+)\.(\d+)$ - 特殊字符:
- 匹配中文汉字:[\u4e00-\u9fa5]
- 匹配首尾空白:^(\s*)|(\s*$)
四、总结
掌握Java正则表达式的关键在于理解元字符的组合逻辑及 Java API 的调用方式。在实际开发中,先明确校验或处理的目标(如“提取数字”或“验证邮箱”),再构建对应的正则表达式。以上就是Java正则表达式的基本用法和实例的详细内容,更多关于Java字符串处理技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









