In Java, matches
attempts to match a pattern against the entire string.
This is true for String.matches
, Pattern.matches
and Matcher.matches
.
If you want to check if there’s a match somewhere in a string, you can use .*\bi.*
. In this case, as a Java string literal, it’s ".*\\bi.*"
.
java.util.regex.Matcher
API links
boolean matches()
: Attempts to match the entire region against the pattern.
What .*
means
As used here, the dot .
is a regex metacharacter that means (almost) any character. *
is a regex metacharacter that means “zero-or-more repetition of”. So for example something like A.*B
matches A
, followed by zero-or-more of “any” character, followed by B
(see on rubular.com).
References
Related questions
Note that both the .
and *
(as well as other metacharacters) may lose their special meaning depending on where they appear. [.*]
is a character class that matches either a literal period .
or a literal asterisk *
. Preceded by a backslash also escapes metacharacters, so a\.b
matches "a.b"
.
Related problems
Java does not have regex-based endsWith
, startsWith
, and contains
. You can still use matches
to accomplish the same things as follows:
matches(".*pattern.*")
– does it contain a match of the pattern anywhere?matches("pattern.*")
– does it start with a match of the pattern?matches(".*pattern")
– does it end with a match of the pattern?
String
API quick cheat sheet
Here’s a quick cheat sheet that lists which methods are regex-based and which aren’t:
- Non-regex methods:
- Regex methods: