常见正则表达式整理与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 包实现,涵盖匹配、替换、验证等操作。合理使用分组、量词和边界符可增强表达式灵活性。实际开发中需结合具体需求选择模式,并注意性能优化。

相关推荐
蓝澈11215 分钟前
迪杰斯特拉算法之解决单源最短路径问题
java·数据结构
Kali_0712 分钟前
使用 Mathematical_Expression 从零开始实现数学题目的作答小游戏【可复制代码】
java·人工智能·免费
future141218 分钟前
每日问题总结
经验分享·笔记
rzl0224 分钟前
java web5(黑马)
java·开发语言·前端
jingling55536 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
莫空000042 分钟前
深入理解JavaScript属性描述符:从数据属性到存取器属性
前端·面试
guojl43 分钟前
深度解读jdk8 HashMap设计与源码
java
我是小哪吒2.044 分钟前
书籍推荐-《对抗机器学习:攻击面、防御机制与人工智能中的学习理论》
人工智能·深度学习·学习·机器学习·ai·语言模型·大模型
guojl1 小时前
深度解读jdk8 ConcurrentHashMap设计与源码
java
爱上语文1 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端