12

我在看一些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() 方法

4

3 回答 3

10

\QJava 正则表达式引擎阻止对和之间的所有元字符的特殊解释\E。例如,[name]匹配单个字符('n''a''m''e'),而\Q[name]\E匹配六个字符 - '[''n''a''m''e'']'. 有关更多详细信息,请参阅正则表达式教程的特殊字符部分。

该方法从可能是外部提供的(例如,由用户输入的)字符串生成正则表达式。由于字符串可能包含元字符,因此该方法将整个字符串包含在\Q和中\E。如果字符串已经包含 a \E,则该方法插入引号的结尾、匹配的以及它找到\E的每个新引号的开头。\E

于 2012-08-13T02:30:13.540 回答
7

\Q并且\E正是这样Pattern.quote()做的,即返回指定字符串的文字模式字符串。

有关更多详细信息,请参阅此链接:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

于 2012-08-13T02:39:33.313 回答
3

好吧,\Q并且在 Java正则表达式\E中具有特殊含义...

这种方法的大部分只是处理引用引号\Q\E它们本身的棘手的边缘情况。

于 2012-08-13T02:14:46.430 回答