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