import java.util.regex.*;
import java.util.*;

public class RegexUtils {
    
    // Check if pattern matches
    public static boolean matches(String pattern, String input) {
        return Pattern.matches(pattern, input);
    }
    
    // Find all matches
    public static List<String> findAllMatches(String pattern, String input) {
        List<String> matches = new ArrayList<>();
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(input);
        while (m.find()) {
            matches.add(m.group());
        }
        return matches;
    }
    
    // Replace all matches
    public static String replaceAll(String pattern, String input, String replacement) {
        return input.replaceAll(pattern, replacement);
    }
    
    // Replace first match
    public static String replaceFirst(String pattern, String input, String replacement) {
        return input.replaceFirst(pattern, replacement);
    }
    
    // Split by pattern
    public static String[] split(String pattern, String input) {
        return input.split(pattern);
    }
    
    // Validate email
    public static boolean isValidEmail(String email) {
        String pattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
        return Pattern.matches(pattern, email);
    }
    
    // Extract groups
    public static List<String> extractGroups(String pattern, String input) {
        List<String> groups = new ArrayList<>();
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(input);
        if (m.find()) {
            for (int i = 0; i <= m.groupCount(); i++) {
                groups.add(m.group(i));
            }
        }
        return groups;
    }
    
    // Validate phone number
    public static boolean isValidPhone(String phone) {
        String pattern = "^\\+?[1-9]\\d{1,14}$";
        return Pattern.matches(pattern, phone);
    }
}