Java 正则表达式使用详解

Java 正则表达式使用详解

正则表达式在 Java 中主要用于字符串的匹配、查找、替换和分割操作。Java 提供了 java.util.regex 包,其中的核心类包括 PatternMatcher


核心类

  1. Pattern
    • 表示正则表达式的编译表示。
    • 使用 Pattern.compile(String regex) 方法编译正则表达式。
    • 是不可变的,线程安全。
  2. Matcher
    • 用于执行匹配操作。
    • 使用 Pattern.matcher(String input) 方法创建。
  3. PatternSyntaxException
    • 当正则表达式语法不正确时抛出。

常见用法

1. 验证字符串格式

import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
        String email = "example@domain.com";
        
        boolean isValid = Pattern.matches(emailRegex, email);
        System.out.println("Is valid email: " + isValid); // 输出: true
    }
}
  • 方法说明

    • Pattern.matches(regex, input):直接验证输入是否匹配正则表达式。

2. 查找和匹配

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String text = "Java is a programming language. Java is also a platform.";
        String regex = "Java";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            System.out.println("Found at index: " + matcher.start());
        }
    }
}
  • 常用方法

    • matcher.find():查找下一个匹配项。
    • matcher.start():获取匹配的起始索引。
    • matcher.end():获取匹配的结束索引。
    • matcher.group():获取匹配的内容。

3. 字符串替换

import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String text = "The color is red.";
        String regex = "red";
        String replacement = "blue";

        String result = text.replaceAll(regex, replacement);
        System.out.println(result); // 输出: The color is blue.
    }
}
  • 方法说明

    • replaceAll(String regex, String replacement):将所有匹配项替换为指定内容。
    • replaceFirst(String regex, String replacement):仅替换第一个匹配项。

4. 字符串分割

import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String text = "one,two,three";
        String regex = ",";

        String[] parts = text.split(regex);
        for (String part : parts) {
            System.out.println(part);
        }
    }
}
  • 方法说明

    • split(String regex):根据正则表达式分割字符串。

常用正则表达式示例

用途正则表达式说明
邮箱验证^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$验证邮箱格式
手机号验证(中国)^1[3-9]\\d{9}$验证 11 位手机号
数字验证^\\d+$纯数字
IP 地址验证^(\\d{1,3}\\.){3}\\d{1,3}$验证 IPv4 地址
日期验证^\\d{4}-\\d{2}-\\d{2}$验证格式如 2024-01-01
URL 验证`^(httphttps)😕/[A-Za-z0-9.-]+.[A-Za-z]+.*$`
含字母和数字的密码^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{6,20}$至少 6-20 位,包含字母和数字

完整示例:解析日志文件

以下代码示例演示如何使用正则表达式从日志文件中提取 IP 地址。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class LogParser {
    public static void main(String[] args) {
        String logs = "192.168.1.1 - - [10/Jan/2025:10:00:00] \"GET /index.html\" 200\n" +
                      "172.16.0.2 - - [10/Jan/2025:10:01:00] \"POST /login\" 403";

        String ipRegex = "\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b";

        Pattern pattern = Pattern.compile(ipRegex);
        Matcher matcher = pattern.matcher(logs);

        while (matcher.find()) {
            System.out.println("Found IP: " + matcher.group());
        }
    }
}

注意事项

  1. 正则表达式的转义
    • 在 Java 中,\ 是转义字符,需用 \\ 表示。例如,正则中的 \d 在 Java 中需写作 \\d
  2. 性能优化
    • 避免重复编译相同的正则表达式,可以将 Pattern 存为静态变量或单例。
  3. Debug 正则表达式
    • 使用工具(如 Regex101)调试正则表达式。

通过灵活运用 Java 的正则表达式功能,可以高效地处理字符串解析、验证和转换任务!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值