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

2022-09-02 12:38:50

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

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


答案 1

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

例如,为了匹配两颗星,您可以在正则表达式中包含以下内容:

\Q**\E

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

另一种更便携的解决方案是使用Pattern.quote,而不是像在代码中那样手动编写:

path = path.replaceFirst(Pattern.quote(req.getContextPath()), "");

答案 2

和 分隔符用于引用文本。\Q\E

文档中

\Q

没有,但引号所有字符,直到 \E

\E

没有,但结束由 \Q 开头的引用