Подтвердить что ты не робот

Java Regex: match (pattern, value) возвращает true, но group() не соответствует

У меня есть странная проблема с регулярным выражением в Java. Я тестировал свое Regex и свою ценность здесь, и он работает. В нем указано, что существует 3 группы (правильно), совпадение для первой группы (но не нулевой группы!) - это SSS, совпадение для группы 2 - BB, а для группы 3 - 0000. Но мой код ниже терпит неудачу, и я вполне уверен потеря, почему...

String pattern = "([^-]*)-([\\D]*)([\\d]*)";
String value = "SSS-BB0000";
Matcher matcher = Pattern.compile(pattern).matcher(value);
//group() is equivalent to group(0) - it fails to match though
matcher.group();

Вот скриншот из результата совпадения с приведенным выше сайтом: enter image description here

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

//returns true
Pattern.matches(pattern, value);
4b9b3361

Ответ 1

Вам нужно позвонить find() до group():

String pattern = "([^-]*)-([\\D]*)([\\d]*)"; 
String value = "SSS-BB0000";
Matcher matcher = Pattern.compile(pattern).matcher(value); 
if (matcher.find()) {
  System.out.println(matcher.group()); // SSS-BB0000
  System.out.println(matcher.group(0)); // SSS-BB0000
  System.out.println(matcher.group(1)); // SSS
  System.out.println(matcher.group(2)); // BB
  System.out.println(matcher.group(3)); // 0000
}

Когда вы вызываете matcher(value), вы просто создаете объект Matcher, который будет соответствовать вашему value. Для фактического сканирования ввода вам необходимо использовать find() или lookingAt():

Ссылки: