Я продолжаю получать ошибку, которую я не должен получать, и я не эксперт по регулярному выражению, но все должно быть так просто. Я много раз просматривал его и не мог понять, почему он не работает. Я также искал кучу чего-то подобного, но я не могу найти никого, у кого такая же проблема.
Это ошибка, которую я получаю:
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 цифры для каждой группы. Я тоже не получаю никаких синтаксических ошибок или предупреждений.
Как указывает исключение, вам нужно найти совпадение с вашим регулярным выражением, прежде чем искать соответствующую группу.
Например, вы можете использовать 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
циклы :)