цифра регулярное выражение не соответствует

1

Я продолжаю получать ошибку, которую я не должен получать, и я не эксперт по регулярному выражению, но все должно быть так просто. Я много раз просматривал его и не мог понять, почему он не работает. Я также искал кучу чего-то подобного, но я не могу найти никого, у кого такая же проблема.

Это ошибка, которую я получаю:

Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at DailyData.importUsers(DailyData.java:456)
    at DailyData.main(DailyData.java:40)

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

Pattern memberSincePattern = Pattern.compile("\\W*(\\d+):(\\d+):(\\d+)\\W*(\\d+)/(\\d+)/(\\d+)");
Matcher memberSinceMatcher = memberSincePattern.matcher("12:12:12 12/12/2012");
String msGroupOne = memberSinceMatcher.group(1);

Я использую eclipse на Ubuntu 14.04 LTS. Я импортировал правильные библиотеки и пробовал \d {1,2} для цифр, а также избавился от ведущего \W *. Я хочу, чтобы он мог захватить 1 или 2 цифры для каждой группы. Я тоже не получаю никаких синтаксических ошибок или предупреждений.

Теги:

1 ответ

2
Лучший ответ

Как указывает исключение, вам нужно найти совпадение с вашим регулярным выражением, прежде чем искать соответствующую группу.

Например, вы можете использовать Matcher#matches следующим образом:

Pattern memberSincePattern = Pattern.compile("\\W*(\\d+):(\\d+):(\\d+)\\W*(\\d+)/(\\d+)/(\\d+)");
Matcher memberSinceMatcher = memberSincePattern.matcher("12:12:12 12/12/2012");

if(memberSinceMatcher.matches()) {
    String msGroupOne = memberSinceMatcher.group(1);
}

Здесь соответствует запись javadoc для Matcher#matches.


В качестве примечания я хотел бы указать, что если вы хотите совместить только подпоследовательность исходной String, по крайней мере один раз, вы должны использовать Matcher#find вместо Matcher#matches. Возможно, в while циклы :)

  • 0
    Ах да, я не могу поверить, что я забыл это! Я использовал matcher.find () и забыл его здесь. Спасибо!
  • 0
    @ChrisLang Вы можете принять ответ, если получили ответ, поэтому качество этого сайта остается отличным :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню