Java 正则表达式^\\Q&\\E

Java 正则表达式^\\Q&\\E,java,regex,Java,Regex,我的申请中有以下代码: private String getRequestPath(HttpServletRequest req) { String path = req.getRequestURI(); path = path.replaceFirst( "^\\Q" + req.getContextPath() + "\\E", ""); path = URLDecoder.decode(path); System.out.pr

我的申请中有以下代码:

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
如何在正则表达式中工作。

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

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

\Q**\E
这将匹配两个字面上的星号,而不是试图将它们解释为“零或更多”量词

另一个更可移植的解决方案是使用以下方法,而不是像在代码中那样手工编写:


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

从:

\Q

无,但引用所有字符直到\E

\E

无,但结束由\Q开始的引用

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


所以。。当您有一个要匹配的字符串,并且它包含特殊的正则表达式字符时,您可以将该字符串放入
\Q
\E
中,以逐字匹配它们。

无论如何,您不应该这样使用它们。使用
模式。改为引用
,这样更安全
path = path.replaceFirst(Pattern.quote(req.getContextPath()), "");