Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Kiểm tra nhiều regex patterns trên một input - Java


Cách 1: Dùng alternation | (OR)

Kết hợp nhiều regex bằng |.

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

public class SampleExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập input: ");
        String input = sc.nextLine();
        String regex = "\\d{10}|^[aeiou]"; // 10 số HOẶC bắt đầu bằng nguyên âm
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            System.out.println(input + " is valid");
        } else {
            System.out.println(input + " is not valid");
        }
    }
}

Kết quả

Nhập input: 9848033228
9848033228 is valid
Nhập input: an apple a day keeps doctor away
an apple a day keeps doctor away is valid

Cách 2: List of Patterns (tách biệt từng regex)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MultipleRegex {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Nhập input: ");
        String input = sc.nextLine();
        String regex1 = "\\d{10}";
        String regex2 = "^[aeiou]";
        Pattern pattern1 = Pattern.compile(regex1);
        Pattern pattern2 = Pattern.compile(regex2);
        List patterns = new ArrayList<>();
        patterns.add(pattern1);
        patterns.add(pattern2);
        for (Pattern pattern : patterns) {
            Matcher matcher = pattern.matcher(input);
            if (matcher.find()) {
                System.out.println("For regex " + pattern.pattern() + " " + input + " is valid");
            } else {
                System.out.println("For regex " + pattern.pattern() + " " + input + " is not valid");
            }
        }
    }
}

Kết quả

Nhập input: 9848033228
For regex \d{10} 9848033228 is valid
For regex ^[aeiou] 9848033228 is not valid

So sánh

CáchƯu điểmNhược điểm
Alternation |Gọn, một lần matchKhông biết regex nào khớp, khó debug
List PatternsBiết rõ regex nào khớp, tái sử dụng PatternNhiều lần match, code dài hơn

Best Practice

  • Compile Pattern một lần, reuse nhiều lần.
  • Dùng List khi cần report chi tiết từng rule.
  • Dùng | khi chỉ cần boolean valid/invalid.