What is the use of Pattern.quote method?

java, pattern-matching, regex

Solution

`\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.

Problem

I'm trying to understand `Pattern.quote` using the following code: ``` String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545"); System.out.println("Pattern is : "+pattern); ``` produces the output: ``` Pattern is : \Q1252343% 8 567 hdfg gf^$545\E ``` What are `\Q` and `\E` here? The documentation description says : 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. But `Pattern.quote`'s return type is `String` and not a compiled `Pattern` object. Why is this method required and what are some usage examples?

Original source