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

相关推荐
firewood20241 小时前
共射三极管放大电路相关情况分析
笔记·学习
zl0_00_01 小时前
美亚2023
学习
AI_56781 小时前
SQL性能优化全景指南:从量子执行计划到自适应索引的终极实践
数据库·人工智能·学习·adb
小小小米粒2 小时前
Maven Tools
java
zl0_00_02 小时前
pctf wp
学习
Hello_Embed2 小时前
libmodbus STM32 主机实验(USB 串口版)
笔记·stm32·学习·嵌入式·freertos·modbus
学编程的闹钟2 小时前
98【html的php化】
学习
kali-Myon2 小时前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
我是咸鱼不闲呀2 小时前
力扣Hot100系列20(Java)——[动态规划]总结(下)( 单词拆分,最大递增子序列,乘积最大子数组 ,分割等和子集,最长有效括号)
java·leetcode·动态规划
risc1234562 小时前
思维脚手架
笔记