Группа захвата regex java

Я пытаюсь захватить нужную часть после: using java expr, но в следующем коде печатная группа захвата – целая строка, что не так?

String s ="xyz: 123a-45"; String patternStr="xyz:[ \\t]*([\\S ]+)"; Pattern p = Pattern.compile(patternStr); Matcher m = p.matcher(s); //System.err.println(s); if(m.find()){ int count = m.groupCount(); System.out.println("group count is "+count); for(int i=0;i<count;i++){ System.out.println(m.group(i)); } } 

Нумерация подгрупп начинается с 1, 0 – полный текст. Просто перейдите к счету + 1 с вашей петлей.

Это связано с тем, что индексы группы начинаются с 1. Группа 0 – это весь шаблон.

Из JavaDoc: «Группы захвата индексируются слева направо, начиная с единицы. Ноль группы обозначает весь шаблон, поэтому выражение m.group (0) эквивалентно m.group ()». Подробнее здесь

  • Как разбить String на некоторый разделитель, но не удаляя этот разделитель в Java?
  • C # Regex Split - запятые вне кавычек
  • Как отменить все регулярное выражение?
  • Случайная строка, которая соответствует регулярному выражению
  • Соответствие строк с помощью шаблона
  • Как извлечь текст, который находится между круглыми скобками (круглые скобки)?
  • Регулярное выражение работает на онлайн-тестере, но не работает в java
  • Lookbehind в regex для VBA?
  • Использование Java для поиска подстроки большей строки с использованием регулярного выражения
  • Разбор CSV-ввода с RegEx в java
  • Vim удалить все строки, которые НЕ содержат определенное слово
  • Давайте будем гением компьютера.