Java regex не подходит, если это необходимо.

Matcher headerMatcher = Pattern.compile("([a-zA-Z]+[a-zA-Z\\s]*)[\\s]+(\\d+)")
 .matcher("jumping around 9");

Итак, первая группа захвата должна быть любой строкой с хотя бы одним символом алфавита. Ниже приводятся примеры:

  • Пример 1
  • азбука
  • A bcde ff ee ggg aaa

Вторая группа захвата - это просто цифры.

  • 1
  • 22
  • 333

Итак, здесь моя попытка захватить эти две группы:

System.out.println(headerMatcher.group(1));
System.out.println(headerMatcher.group(2));

И вот результат:

run:
Exception in thread "main" java.lang.IllegalStateException: No match found
 at java.util.regex.Matcher.group(Matcher.java:485)
 at Main.main(Main.java:51)
Java Result: 1

После тестирования на http://www.regexplanet.com/advanced/java/index.html Вот что я ожидал:

Что-то не так, и я не знаю, почему.

2 ответа

Вы получите java.lang.IllegalStateException если вы не вызываете Matcher#matches Matcher#find или Matcher#find перед вызовом Matcher#group(int)


Ошибка совпадения не найдена в java.util.regex.Matcher.group(...) просто заявляет, что полученная строка не соответствует регулярному выражению в любом месте.

Вы хотите использовать: if (matcher.find())

licensed under cc by-sa 3.0 with attribution.