Java中正则表达式优化

时间:2024-10-16 12:01:59

正则表达式的编译过程涉及将其解析为有限状态机,这需要消耗时间和计算资源,特别是对于复杂模式。每次调用 Pattern.compile 都会重复执行这一过程,导致性能下降。

为了优化正则表达式的编译过程,避免重复编译,可以将编译的正则表达式存储为静态常量。这样,在后续使用时,就可以直接利用已编译的模式,而无需重新编译。

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

public class RegexExample {

    // 将正则表达式编译成静态常量
    private static final Pattern EMAIL_PATTERN = Pattern.compile("^[\\w-\\.]+@[\\w-]+\\.[a-zA-Z]{2,}$");

    public static void main(String[] args) {
        String email1 = "test@example.com";
        String email2 = "invalid-email";

        // 使用已编译的模式进行匹配
        System.out.println("Is valid email: " + isValidEmail(email1)); // 输出: true
        System.out.println("Is valid email: " + isValidEmail(email2)); // 输出: false
    }

    // 使用已编译的 Pattern 进行检查
    public static boolean isValidEmail(String email) {
        Matcher matcher = EMAIL_PATTERN.matcher(email);
        return matcher.matches();
    }
}