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

一、常见正则表达式整理

1. 基础验证类

  • 邮箱地址
    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$
    (匹配如 [email protected]
  • 手机号
    ^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 = "[email protected]";
        
        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 包实现,涵盖匹配、替换、验证等操作。合理使用分组、量词和边界符可增强表达式灵活性。实际开发中需结合具体需求选择模式,并注意性能优化。

相关推荐
YuCaiH1 分钟前
数组理论基础
笔记·leetcode·c·数组
拉不动的猪5 分钟前
前端自做埋点,我们应该要注意的几个问题
前端·javascript·面试
爱喝一杯白开水5 分钟前
SpringMVC从入门到上手-全面讲解SpringMVC的使用.
java·spring·springmvc
王景程15 分钟前
如何测试短信接口
java·服务器·前端
尤物程序猿20 分钟前
【2025面试Java常问八股之redis】zset数据结构的实现,跳表和B+树的对比
数据结构·redis·面试
bicijinlian1 小时前
多语言笔记系列:使用导入魔法命令
笔记
zhang23839061541 小时前
IDEA add gitlab account 提示
java·gitlab·intellij-idea·idea
牛马baby1 小时前
Java高频面试之并发编程-07
java·开发语言·面试
卓怡学长2 小时前
w304基于HTML5的民谣网站的设计与实现
java·前端·数据库·spring boot·spring·html5
YONG823_API2 小时前
深度探究获取淘宝商品数据的途径|API接口|批量自动化采集商品数据
java·前端·自动化