If you need to match characters that are a part of the regular expression syntax you can mark all or part of the pattern as a regex literal.
\Q
marks the beginning of the regex literal.
\E
marks the end of the regex literal.
// the following throws a PatternSyntaxException because of the un-closed bracket
"[123".matches("[123");
// wrapping the bracket in \Q and \E allows the pattern to match as you would expect.
"[123".matches("\\Q[\\E123"); // returns true
An easier way of doing it without having to remember the \Q
and \E
escape sequences is to use Pattern.quote()
"[123".matches(Pattern.quote("[") + "123"); // returns true