Java Regex: match (pattern, value) возвращает true, но group () не соответствует - PullRequest
14 голосов
/ 12 августа 2011

У меня странная проблема с регулярным выражением в 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);

1 Ответ

26 голосов
/ 12 августа 2011

Вам необходимо позвонить 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():

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...