正则表达式^ \\ Q& \\è

时间:2015-06-11 09:31:16

标签: java regex

我的应用程序中有以下代码:

private String getRequestPath(HttpServletRequest req) {
        String path = req.getRequestURI();
        path = path.replaceFirst( "^\\Q" + req.getContextPath() + "\\E", "");
        path = URLDecoder.decode(path);
        System.out.println("req.getRequestURI()="+req.getRequestURI());
        System.out.println("path="+path);
        return path;
    }

在输出中,当我尝试访问此方法所属的servlet时,我可以看到以下消息:

req.getRequestURI()=/MyApp/test
path=/test

^\\Q& \\E适用于正则表达式。

3 个答案:

答案 0 :(得分:6)

\Q\E分别是正则表达式文字中文字字符串的开头和结尾;他们指示正则表达式引擎不要将这两个“标记”之间的文本解释为正则表达式。

例如,为了匹配两颗星,你可以在正则表达式中使用它:

\Q**\E

这将匹配两个文字星,而不是尝试将它们解释为“零或更多”量词。

另一种更便携的解决方案是使用Pattern.quote

,而不是像在代码中那样手写这种方法。
path = path.replaceFirst(Pattern.quote(req.getContextPath()), "");

答案 1 :(得分:1)

\Q\E分隔符用于引用文字。

来自documentation

\Q

  

没什么,但引用所有字符直到\ E

\E

  

没什么,但结尾引用是由\ Q

开始的

答案 2 :(得分:0)

  

在正则表达式中,\ Q和\ E之间的所有字符都被转义

所以..如果你有一个匹配的字符串,如果它包含特殊的正则表达式字符,你可以将字符串放在\Q\E内,以便按字面意思匹配它们。