[Решено] java.lang.IllegalStateException: при использовании именованных групп регулярных выражений совпадений не найдено

Вы получите это сообщение об исключении при попытке использовать именованные группы при проверке или сопоставлении регулярных выражений Java.

Основная причина ошибки «Соответствие не найдено» в сопоставлении именованных групп регулярных выражений

В журнале ошибок отобразится сообщение, подобное следующему:

Exception in thread "main" java.lang.IllegalStateException: No match foundat java.util.regex.Matcher.group(Unknown Source)

Решение

Вы, вероятно, не используете «matcher.matches()» перед извлечением именованной группы из matcher. Вам следует выполнить полную опцию, как показано ниже:

List<String> dates = new ArrayList<String>();dates.add("02/31/2011"); //Invalid datedates.add("02/27/2011"); //Valid dateString regex = "^(?<month>[0-3]?[0-9])/(?<day>[0-3]?[0-9])/(?<year>(?:[0-9]{2})?[0-9]{2})$";Pattern pattern = Pattern.compile(regex);for(String date : dates){Matcher matcher = pattern.matcher(date);//This is the root cause of error. Don't forget to do this !!matcher.matches();//Get date parts hereString day = matcher.group(2);String month = matcher.group(1);String year = matcher.group(3);String formattedDate = month + "/" + day + "/" + year;System.out.println("Date to check : " + formattedDate);}

В большинстве случаев это решит вашу ошибку.

Прокрутить вверх