Java正则表达式基础语法与常用实例详解

小林子
小林子
发布时间:2026-10-16 | 3人浏览过
原创

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字符串处理技巧的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表