radhikay Ответов: 1

Может ли кто-нибудь объяснить результат


Может ли кто нибудь объяснить выход


Системы.из.код println(шаблон.играм("[АМН]?", "а"));//верно (А или М или Н приходит один раз)
System.out.println(Pattern.matches("[amn]?", "am"));//false (a or m or n must come one time)  


Что я уже пробовал:

Я не могу понять, почему второе утверждение ложно. Я ожидаю, что это будет правдой, потому что " А " и " М " приходят по крайней мере один раз

1 Ответов

Рейтинг:
1

OriginalGriff

Pattern.matcher(String str) возвращает Сопоставитель, который может находить шаблоны в строка.
Pattern.matches(String str) тесты, Если вся строка соответствует шаблону.

Если вы хотите работать с регулярными выражениями, получите копию Экспрессо[^] - это бесплатно, и он проверяет и генерирует регулярные выражения.
Он скажет вам, что именно "[amn]?" средства:

Any character in this class: [amn], zero or one repetitions

Таким образом, один символ в классе будет соответствовать всей строке, а два символа-нет.
Попробуй: "[amn]*" вместо.


radhikay

В моем вопросе оба утверждения имеют Pattern.matches, но почему второе утверждение ложно? И "М", и "Н" присутствуют в [АМН]

OriginalGriff

Прочтите ответ еще раз ...

phil.o

Из-за спецификатора "ноль или одно повторение": "am" имеет длину в два символа, таким образом, превышает предел.