Java正则案例如何基础编写

wen java案例 20

Java正则表达式基础编写案例

基础正则表达式语法

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexBasicDemo {
    public static void main(String[] args) {
        // 1. 基础匹配
        String text = "Hello123World456";
        Pattern pattern = Pattern.compile("\\d+");  // 匹配数字
        Matcher matcher = pattern.matcher(text);
        // 查找匹配
        while (matcher.find()) {
            System.out.println("找到数字: " + matcher.group());
        }
    }
}

常用匹配模式示例

public class RegexPatterns {
    public static void main(String[] args) {
        // 2.1 匹配字符串是否包含字母
        String str1 = "abc123";
        boolean hasLetter = str1.matches(".*[a-zA-Z]+.*");
        System.out.println("包含字母: " + hasLetter);  // true
        // 2.2 验证邮箱格式
        String email = "test@example.com";
        boolean isValidEmail = email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
        System.out.println("有效邮箱: " + isValidEmail);  // true
        // 2.3 验证手机号
        String phone = "13800138000";
        boolean isValidPhone = phone.matches("^1[3-9]\\d{9}$");
        System.out.println("有效手机号: " + isValidPhone);  // true
        // 2.4 验证密码强度(至少8位,包含大小写字母和数字)
        String password = "Password123";
        boolean isStrongPassword = password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$");
        System.out.println("密码强度合格: " + isStrongPassword);  // true
    }
}

实用案例

public class RegexUseCases {
    // 3.1 提取所有数字
    public static void extractNumbers(String text) {
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(text);
        System.out.println("提取数字:");
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
    // 3.2 替换敏感信息
    public static String maskPhoneNumber(String text) {
        // 将手机号中间4位替换为****
        return text.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }
    // 3.3 分割字符串
    public static void splitByRegex(String text) {
        // 按非字母字符分割
        String[] parts = text.split("[^a-zA-Z]+");
        System.out.println("分割结果:");
        for (String part : parts) {
            if (!part.isEmpty()) {
                System.out.println(part);
            }
        }
    }
    // 3.4 验证身份证号
    public static boolean isValidIDCard(String idCard) {
        // 简单验证:18位数字或17位数字+X
        return idCard.matches("^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$");
    }
    public static void main(String[] args) {
        // 测试提取数字
        extractNumbers("订单号:12345, 金额:789元");
        // 测试替换手机号
        String text = "联系我:13800138000";
        System.out.println("掩码后: " + maskPhoneNumber(text));
        // 测试分割
        splitByRegex("Hello123World!@#$Test");
        // 测试身份证验证
        String idCard = "110101199003071234";
        System.out.println("身份证有效: " + isValidIDCard(idCard));
    }
}

常见正则表达式速查表

public class RegexCheatsheet {
    public static void main(String[] args) {
        // 常用正则表达式
        String[][] patterns = {
            // 类别, 正则表达式, 说明
            {"邮箱", "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$", "标准邮箱格式"},
            {"手机号", "^1[3-9]\\d{9}$", "中国大陆手机号"},
            {"身份证", "^\\d{17}[\\dXx]$", "18位身份证号"},
            {"URL", "^(https?://)?[\\w.-]+\\.[a-zA-Z]{2,}(/\\S*)?$", "URL链接"},
            {"IP地址", "^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$", "IPv4地址"},
            {"中文字符", "^[\\u4e00-\\u9fa5]+$", "纯中文"},
            {"英文字母", "^[a-zA-Z]+$", "纯英文"},
            {"数字", "^\\d+$", "纯数字"},
            {"日期", "^\\d{4}-\\d{2}-\\d{2}$", "YYYY-MM-DD格式"},
            {"时间", "^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$", "HH:mm:ss格式"}
        };
        System.out.println("===== 常用正则表达式速查表 =====");
        System.out.printf("%-10s %-40s %-20s%n", "类型", "正则表达式", "说明");
        System.out.println("-".repeat(70));
        for (String[] pattern : patterns) {
            System.out.printf("%-10s %-40s %-20s%n", pattern[0], pattern[1], pattern[2]);
        }
    }
}

Pattern类和Matcher类常用方法

public class PatternMatcherMethods {
    public static void main(String[] args) {
        String text = "Java Java Java, Programming";
        // Pattern类方法
        Pattern pattern = Pattern.compile("Java", Pattern.CASE_INSENSITIVE);  // 忽略大小写
        // Matcher类方法
        Matcher matcher = pattern.matcher(text);
        // 5.1 find() - 查找匹配
        System.out.println("=== find()示例 ===");
        while (matcher.find()) {
            System.out.println("找到: " + matcher.group() + 
                             ", 位置: " + matcher.start() + "-" + matcher.end());
        }
        // 5.2 matches() - 完全匹配
        System.out.println("\n=== matches()示例 ===");
        boolean isMatch = Pattern.matches("Java.*", "Java Programming");
        System.out.println("完全匹配: " + isMatch);  // true
        // 5.3 lookingAt() - 从开头匹配
        System.out.println("\n=== lookingAt()示例 ===");
        matcher = Pattern.compile("Java").matcher("Java Programming");
        System.out.println("开头匹配: " + matcher.lookingAt());  // true
        // 5.4 replace系列方法
        System.out.println("\n=== replace()示例 ===");
        String result = text.replaceAll("Java", "Python");
        System.out.println("替换结果: " + result);
        // 5.5 分组功能
        System.out.println("\n=== 分组示例 ===");
        Pattern groupPattern = Pattern.compile("(\\d{3})-(\\d{4})-(\\d{4})");
        Matcher groupMatcher = groupPattern.matcher("010-1234-5678");
        if (groupMatcher.find()) {
            System.out.println("区号: " + groupMatcher.group(1));  // 010
            System.out.println("前缀: " + groupMatcher.group(2));  // 1234
            System.out.println("号码: " + groupMatcher.group(3));  // 5678
        }
    }
}

实际应用示例:日志解析

public class LogParser {
    public static void parseLogLine(String logLine) {
        // 解析格式: [2024-01-15 10:30:00] [ERROR] 用户登录失败: 用户名=admin
        String regex = "\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\] \\[(\\w+)\\] (.+)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(logLine);
        if (matcher.matches()) {
            String timestamp = matcher.group(1);
            String level = matcher.group(2);
            String message = matcher.group(3);
            System.out.println("时间戳: " + timestamp);
            System.out.println("日志级别: " + level);
            System.out.println("消息内容: " + message);
        }
    }
    public static void main(String[] args) {
        String log = "[2024-01-15 10:30:00] [ERROR] 用户登录失败: 用户名=admin";
        parseLogLine(log);
    }
}

使用建议

  1. 性能优化:频繁使用的正则表达式应编译为Pattern对象
  2. 转义处理:在Java字符串中使用表示正则中的
  3. 复杂正则:使用非捕获组提高性能
  4. 测试验证:使用在线正则测试工具先验证表达式
  5. 边界匹配:注意使用和确保精确匹配

Java正则案例如何基础编写

抱歉,评论功能暂时关闭!