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);
Ответы
Ответ 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()
:
Ссылки: