Ответ 1
В Java matches
пытается сопоставить шаблон со всей строкой.
Это справедливо для String.matches
, Pattern.matches
и Matcher.matches
.
Если вы хотите проверить, есть ли где-нибудь в строке, вы можете использовать .*\bi.*
. В этом случае, как строковый литерал Java, он ".*\\bi.*"
.
java.util.regex.Matcher
Ссылки API
-
boolean matches()
: Попытка сопоставить всю область с шаблоном.
Что .*
означает
Как используется здесь, точка .
является метасимволом регулярного выражения, что означает (почти) любой символ. *
является метасимволом регулярного выражения, что означает "нулевое или большее повторение". Итак, например, что-то вроде A.*B
соответствует A
, за которым следует нуль или больше символа "any", за которым следует B
(см. на rubular.com).
Ссылки
Связанные вопросы
Обратите внимание, что и теги .
, и *
(а также другие метасимволы) могут потерять свое особое значение в зависимости от того, где они появляются. [.*]
- это класс символов, который соответствует либо буквальному периоду .
, либо буквенной звездочке *
. Предшествующая обратная косая черта также ускользает от метасимволов, поэтому a\.b
соответствует "a.b"
.
Связанные проблемы
Java не имеет regex-based endsWith
, startsWith
и contains
. Вы можете использовать matches
для выполнения следующих действий:
-
matches(".*pattern.*")
- содержит ли он соответствие шаблону где-нибудь? -
matches("pattern.*")
- начинается ли это с соответствия шаблону? -
matches(".*pattern")
- заканчивается ли совпадение с шаблоном?
String
Быстрый лист обмана API
Вот быстрый лист читов, в котором перечислены, какие методы основаны на регулярных выражениях, а какие нет:
- Не-регулярные методы:
- Методы регулярных выражений: