\Q
means “start of literal text” (i.e. regex “open quote”)
\E
means “end of literal text” (i.e. regex “close quote”)
Calling the Pattern.quote()
method wraps the string in \Q...\E
, which turns the text is into a regex literal. For example, Pattern.quote(".*")
would match a dot and then an asterisk:
System.out.println("foo".matches(".*")); // true
System.out.println("foo".matches(Pattern.quote(".*"))); // false
System.out.println(".*".matches(Pattern.quote(".*"))); // true
The method’s purpose is to not require the programmer to have to remember the special terms \Q
and \E
and to add a bit of readability to the code – regex is hard enough to read already. Compare:
someString.matches(Pattern.quote(someLiteral));
someString.matches("\\Q" + someLiteral + "\\E"));
Referring to the javadoc:
Returns a literal pattern String for the specified String.
This method produces a String that can be used to create a Pattern that would match the string s as if it were a literal pattern.
Metacharacters or escape sequences in the input sequence will be given no special meaning.