Reputation: 463
I was looking at some of the jdk code. I found these characters. Could someone explain to me what do these mean.
public static String quote(String s) {
int slashEIndex = s.indexOf("\\E"); // What does this mean. Is this a special char in java. if so what does this do.
if (slashEIndex == -1)
return "\\Q" + s + "\\E";
StringBuilder sb = new StringBuilder(s.length() * 2);
sb.append("\\Q");
slashEIndex = 0;
int current = 0;
while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
sb.append(s.substring(current, slashEIndex));
current = slashEIndex + 2;
sb.append("\\E\\\\E\\Q");
}
sb.append(s.substring(current, s.length()));
sb.append("\\E");
return sb.toString();
}
From the above code example I was able to figure out what's happening as in the method finds the occurrences of \ and converts them to \E and \Q. Could someone explain why that's the case.
For more context on this method, I was looking into the Pattern.quote() method from jdk 1.6
Upvotes: 12
Views: 13261
Reputation: 33534
\Q
and \E
is exactly what Pattern.quote()
does, that is to Returns a literal pattern String for the specified String.
For more details see this link:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html
Upvotes: 8
Reputation: 726509
Java regex engine blocks special interpretation of all meta-characters between \Q
and \E
. For example, [name]
matches a single character ('n'
, 'a'
, 'm'
, or 'e'
), while \Q[name]\E
matches six characters - '['
, 'n'
, 'a'
, 'm'
, 'e'
, and ']'
. See the Special Characters section of the regex tutorial for more detail.
The method makes a regular expression from a string that is presumably provided externally (e.g. entered by a user). Since the string may contain meta-characters, the method encloses the entire string in \Q
and \E
. If the string already contains a \E
, the method inserts the end of the quote, a match of \E
, and a beginning of a new quote for each \E
that it finds..
Upvotes: 11
Reputation: 198033
Well, \Q
and \E
have a special meaning in Java regular expressions...
Most of this method is just working on the tricky edge case of quoting the quote markers \Q
and \E
themselves.
Upvotes: 3