package com.ruoyi.common.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; import java.util.List; public class PlateNumberExtractor { // 省份简称正则片段 private static final String PROVINCE_ABBRS = "京|津|沪|渝|冀|晋|辽|吉|黑|苏|浙|皖|闽|赣|鲁|豫|鄂|湘|粤|琼|川|贵|云|陕|甘|青|蒙|桂|宁|新|藏|港|澳|台"; // 车牌号正则:省份简称 + A-Z字母 + 5-6位字母/数字(含新能源车牌) private static final String PLATE_REGEX = "([" + PROVINCE_ABBRS + "][A-Z][A-Z0-9]{5,6})"; private static final Pattern PLATE_PATTERN = Pattern.compile(PLATE_REGEX); /** * 提取字符串中所有符合规则的车牌号 * @param input 输入字符串 * @return 车牌号列表(无匹配则返回空列表) */ public static List extractPlateNumbers(String input) { List plateNumbers = new ArrayList<>(); if (input == null || input.isEmpty()) { return plateNumbers; } Matcher matcher = PLATE_PATTERN.matcher(input); while (matcher.find()) { System.out.println(matcher.group(1)); plateNumbers.add(matcher.group(1)); } return plateNumbers; } public static String extractPlateNumber(String input) { Matcher matcher = PLATE_PATTERN.matcher(input); if (matcher.find()) { return matcher.group(1); } return ""; } // public static void main(String[] args) { // String input = "xxx粤VSX120,测试京A88888,沪B123456(新能源)"; // String plates = extractPlateNumber(input); // System.out.println("提取的车牌号:" + plates); // // 输出:[粤VSX120, 京A88888, 沪B123456] // } }