跳转至

Java 正则表达式速查表:全面指南

简介

正则表达式(Regular Expression)在 Java 编程中是一个强大的工具,用于处理和操作字符串。它提供了一种灵活且精确的方式来匹配、搜索、替换和拆分字符串。本博客将围绕 Java 正则表达式速查表展开,涵盖基础概念、使用方法、常见实践以及最佳实践,帮助你快速掌握并高效运用正则表达式。

目录

  1. 基础概念
  2. 使用方法
    • 匹配字符串
    • 搜索字符串
    • 替换字符串
    • 拆分字符串
  3. 常见实践
    • 验证邮箱地址
    • 验证手机号码
    • 提取特定文本
  4. 最佳实践
    • 性能优化
    • 可读性提升
  5. 小结
  6. 参考资料

基础概念

正则表达式是由字符和特殊字符(元字符)组成的模式。这些模式用于定义字符串的匹配规则。例如,\d 是一个元字符,表示任意一个数字,[a-zA-Z] 表示任意一个字母(大写或小写)。

常见元字符: - .:匹配任意单个字符(除了换行符) - *:匹配前面的字符 0 次或多次 - +:匹配前面的字符 1 次或多次 - ?:匹配前面的字符 0 次或 1 次 - []:匹配方括号内指定的任意一个字符 - ():用于分组,将多个字符组合成一个单元

使用方法

匹配字符串

在 Java 中,可以使用 PatternMatcher 类来进行正则表达式匹配。

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

public class RegexExample {
    public static void main(String[] args) {
        String text = "Hello, World!";
        String pattern = "Hello";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(text);

        if (m.find()) {
            System.out.println("匹配成功");
        } else {
            System.out.println("匹配失败");
        }
    }
}

搜索字符串

搜索字符串中所有匹配的部分:

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

public class RegexSearchExample {
    public static void main(String[] args) {
        String text = "This is a test. This is another test.";
        String pattern = "test";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(text);

        while (m.find()) {
            System.out.println("找到匹配项: " + m.group());
            System.out.println("起始位置: " + m.start());
            System.out.println("结束位置: " + m.end());
        }
    }
}

替换字符串

使用正则表达式替换字符串中的匹配部分:

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

public class RegexReplaceExample {
    public static void main(String[] args) {
        String text = "Hello, World!";
        String pattern = "World";
        String replacement = "Java";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(text);

        String result = m.replaceAll(replacement);
        System.out.println("替换后的字符串: " + result);
    }
}

拆分字符串

根据正则表达式拆分字符串:

import java.util.regex.Pattern;

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

        Pattern r = Pattern.compile(pattern);
        String[] parts = r.split(text);

        for (String part : parts) {
            System.out.println(part);
        }
    }
}

常见实践

验证邮箱地址

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

public class EmailValidator {
    private static final String EMAIL_PATTERN =
        "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$";

    public static boolean validate(String email) {
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    public static void main(String[] args) {
        String email = "[email protected]";
        if (validate(email)) {
            System.out.println("有效的邮箱地址");
        } else {
            System.out.println("无效的邮箱地址");
        }
    }
}

验证手机号码

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

public class PhoneNumberValidator {
    private static final String PHONE_PATTERN =
        "^1[3-9]\\d{9}$";

    public static boolean validate(String phone) {
        Pattern pattern = Pattern.compile(PHONE_PATTERN);
        Matcher matcher = pattern.matcher(phone);
        return matcher.matches();
    }

    public static void main(String[] args) {
        String phone = "13800138000";
        if (validate(phone)) {
            System.out.println("有效的手机号码");
        } else {
            System.out.println("无效的手机号码");
        }
    }
}

提取特定文本

从 HTML 标签中提取文本:

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

public class HtmlTextExtractor {
    private static final String HTML_TAG_PATTERN =
        "<.*?>";

    public static String extractText(String html) {
        Pattern pattern = Pattern.compile(HTML_TAG_PATTERN);
        Matcher matcher = pattern.matcher(html);
        return matcher.replaceAll("");
    }

    public static void main(String[] args) {
        String html = "<p>Hello, World!</p>";
        String text = extractText(html);
        System.out.println("提取的文本: " + text);
    }
}

最佳实践

性能优化

  • 预编译正则表达式:在需要多次使用同一个正则表达式时,应预编译它,避免每次都进行编译,提高性能。
  • 使用 Pattern.quote():如果要匹配的字符串包含特殊字符,使用 Pattern.quote() 方法将其转换为字面量模式,以避免特殊字符被误解析。

可读性提升

  • 使用注释:在复杂的正则表达式中添加注释,解释每个部分的作用,提高代码的可读性。
  • 拆分复杂模式:将复杂的正则表达式拆分成多个简单的模式,逐步进行匹配和处理。

小结

通过本博客,我们详细介绍了 Java 正则表达式速查表相关内容,包括基础概念、使用方法、常见实践和最佳实践。正则表达式在字符串处理中非常强大,但需要不断练习和熟悉各种元字符及模式组合。希望这些知识能帮助你在 Java 开发中更高效地运用正则表达式。

参考资料