我的应用程序中有以下代码:
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
适用于正则表达式。
答案 0 :(得分:6)
\Q
和\E
分别是正则表达式文字中文字字符串的开头和结尾;他们指示正则表达式引擎不要将这两个“标记”之间的文本解释为正则表达式。
例如,为了匹配两颗星,你可以在正则表达式中使用它:
\Q**\E
这将匹配两个文字星,而不是尝试将它们解释为“零或更多”量词。
另一种更便携的解决方案是使用Pattern.quote
path = path.replaceFirst(Pattern.quote(req.getContextPath()), "");
答案 1 :(得分:1)
答案 2 :(得分:0)
在正则表达式中,\ Q和\ E之间的所有字符都被转义
所以..如果你有一个匹配的字符串,如果它包含特殊的正则表达式字符,你可以将字符串放在\Q
和\E
内,以便按字面意思匹配它们。