Мне нужно найти номерной знак в тексте, соответствующем приведенному ниже шаблону
(«L» обозначает букву, «D» обозначает число):
LLLDDD, LLLDDDD, LLDDDD, DDDDLL
между ними могут быть пробелы, такие как LLL DDD
У меня есть этот метод, который отлично работает, если в тексте указан только номерной знак, например, «SS1234»
public static boolean plateNumberExist(String target) {
return Pattern.compile("^([A-Za-z]{3} ?[0-9]{3})?([A-Za-z]{3} ?[0-9]{4})?([A-Za-z]{2} ?[0-9]{4})?([0-9]{4} ?[A-Za-z]{2})?$").matcher(target).matches();
}
Но если я добавлю еще один текст с номером автомобильного номера, как показано ниже, код всегда будет ложным
if(plateNumberExist("Republic SS1234")){
showToast("Plate Number Found");
}else{
showToast("No Plate Number");
}
Таким образом, фактический код, который я использую, чтобы получить номерной знак, - это код ниже, но он также не работает.
String inputString = "Republic SS1234";
Pattern pattern = Pattern.compile("^([A-Za-z]{3} ?[0-9]{3})?([A-Za-z]{3} ?[0-9]{4})?([A-Za-z]{2} ?[0-9]{4})?([0-9]{4} ?[A-Za-z]{2})?$");
Matcher matcher = pattern.matcher(inputString);
if (matcher.find()) {
String platenumber = inputString.substring(matcher.start(), matcher.end());
showToast(platenumber);
} else {
showToast("No Plate Number Found");
}
Проблема в регулярном выражении, но я просто не понимаю, почему он работает, если это только номерной знак, но если у меня есть другой текст с номером, он не работает