常见正则表达式整理与Java使用正则表达式的例子

一、常见正则表达式整理

1. 基础验证类

  • 邮箱地址
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
    (匹配如 user@example.com)
  • 手机号
    ^1[3-9]\\\\d{9}$
    (匹配国内11位手机号,如 13812345678)
  • 中文字符
    ^[\u4e00-\u9fa5]+$
    (匹配纯中文字符串,如 你好)
  • 密码强度
    ^(?=.*[a-zA-Z])(?=.*\\d).{8,20}$
    (至少含字母和数字,长度8-20位)

2. 数据格式类

  • 日期(YYYY-MM-DD)
    ^\\d{4}-\\d{2}-\\d{2}$
  • 浮点数
    ^-?\\d+(\\.\\d+)?$
    (支持正负数及可选小数部分)
  • URL
    ^(https?:冒险一下)://(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\. [a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%._\\+~#?&//=]*)$
    (匹配带协议的完整URL)

3. 文件与路径类

  • 文件扩展名(如.jpg)
    \\\\.(jpg|png|gif)$
    (匹配以特定扩展名结尾的文件)

二、Java正则表达式使用示例

1. 邮箱匹配

java 复制代码
import java.util.regex.*;
public class EmailExample {
    public static void main(String[] args) {
        String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\. [a-zA-Z]{2,}$";
        String input = "user.name+test@example.co.uk";
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.matches()) {
            System.out.println("邮箱有效");
        } else {
            System.out.println("邮箱无效");
        }
    }
}
  • 解释:^ 和 $ 确保全字符串匹配,\\. 转义点号,{2,} 匹配顶级域名长度。

2. 提取中文字符

java 复制代码
public class ChineseExtract {
    public static void main(String[] args) {
        String input = "Hello 你好!欢迎使用正则表达式。";
        String regex = "[\\u4e00-\\u9fa5]+";
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        
        while (matcher.find()) {
            System.out.println("提取到中文:" + matcher.group());  // 输出 "你好" 和 "欢迎使用正则表达式"
        }
    }
}
  • 解释:\\u4e00-\\u9fa5 匹配Unicode范围内的中文字符。

3. 替换字符串中的空格

java 复制代码
public class SpaceReplace {
    public static void main(String[] args) {
        String input = "   Java   正则表达式   示例   ";
        String regex = "\\s+";  // 匹配一个或多个空格
        
        String result = input.replaceAll(regex, " ").trim();
        System.out.println(result);  // 输出 "Java 正则表达式 示例"
    }
}
  • 解释:\\s+ 匹配连续空白字符,replaceAll 替换为单个空格。

4. 验证手机号

java 复制代码
public class PhoneValidation {
    public static void main(String[] args) {
        String regex = "^1[3-9]\\\\d{9}$";
        String phone = "13812345678";
        
        boolean isValid = phone.matches(regex);
        System.out.println("手机号是否有效:" + isValid);  // 输出 true
    }
}
  • 解释:1 开头,第二位3-9,后接9位数字。

三、注意事项与优化建议

  1. 转义字符:Java中需双反斜杠(如 \\d 表示数字)。
  2. 预编译:高频使用的正则表达式应预编译为 Pattern 对象(如 Pattern.compile(regex))。
  3. 避免回溯:减少 .* 等贪婪匹配,优先用精确范围(如 \\d{4} 代替 .*)。
  4. 性能敏感场景:使用 Matcher.find() 代替 String.matches() 提升效率。

四、总结

Java正则表达式通过 java.util.regex 包实现,涵盖匹配、替换、验证等操作。合理使用分组、量词和边界符可增强表达式灵活性。实际开发中需结合具体需求选择模式,并注意性能优化。

相关推荐
wangbing11251 小时前
springboot应用关闭时触发动作
java·spring boot·后端
weixin_460443564 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w7 小时前
什么是AOP
java
Cc.Y8 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
启观川8 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
paopaokaka_luck8 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787058 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev8 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
Sarvartha8 小时前
Lambda 表达式和函数式接口
java·开发语言
计算机毕业设计杰瑞8 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计