2012-08-13 139 views
7

我在看一些jdk代码。我找到了这些角色。有人可以向我解释这些是什么意思。这些特殊字符在Java中意味着什么?

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值。有人可以解释为什么是这样。

有关此方法的更多方面,我一直在寻找进入Pattern.quote()方法从JDK 1.6

+0

出现此代码为[从Java源解除直(http://www.docjar.com/html/api/java /util/regex/Pattern.java.html)('Pattern.java',行1276..1293)。 – dasblinkenlight 2012-08-13 03:12:22

+0

是的,它来自jdk来源Pattern.java – JourneyMan 2013-03-22 21:25:38

回答

2

好,\Q\E在Java的regular expressions特殊的意义......

大多数这种方法只是在引用引用标记\Q\E本身的棘手边缘情况下工作。

4

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

该方法从大概由外部提供的字符串(例如,由用户输入)制作正则表达式。由于该字符串可能包含元字符,因此该方法将整个字符串包含在\Q\E中。如果字符串已包含\E,该方法插入的报价,的\E匹配,并为每个找到\E一个新的报价的开始结束..