method matches not work well [duplicate]

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


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:

Leave a Comment