我正在查看一些jdk代码。我找到了这些角色。有人可以向我解释这些意味着什么。
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();
}
从上面的代码示例中,我能够找出正在发生的事情,因为在方法中找到了\的出现并将它们转换为\ E和\ Q.有人可以解释为什么会这样。
有关此方法的更多上下文,我正在研究jdk 1.6中的Pattern.quote()方法
答案 0 :(得分:5)
Java正则表达式引擎会阻止\Q
和\E
之间所有元字符的特殊解释。例如,[name]
匹配单个字符('n'
,'a'
,'m'
或'e'
),而\Q[name]\E
匹配六个字符 - { {1}},'['
,'n'
,'a'
,'m'
和'e'
。有关更多详细信息,请参阅regex tutorial的特殊字符部分。
该方法从可能在外部提供的字符串(例如,由用户输入)生成正则表达式。由于字符串可能包含元字符,因此该方法将整个字符串括在']'
和\Q
中。如果字符串已包含\E
,则该方法会插入引用的结尾,\E
的匹配项以及它找到的每个\E
的新引号的开头。< / p>
答案 1 :(得分:2)
嗯,\Q
和\E
在Java regular expressions中有特殊含义......
这种方法的大部分内容只是处理引用标记\Q
和\E
本身的棘手边缘情况。
答案 2 :(得分:2)
\Q
和\E
正是Pattern.quote()
所做的,即返回指定字符串的文字模式字符串。
有关详细信息,请参阅此链接:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html