2015-06-11 124 views
0

我有以下代碼在我的申請:正則表達式^ \ Q&\Ë

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; 
    } 

在輸出I可以看到下面的消息時,我試圖訪問該方法所屬的小服務程序:

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

如何^\\Q & \\E作品正則表達式。

+0

反正你不應該這樣使用它們。使用'Pattern.quote'代替 - 更安全 – nhahtdh

回答

2

\Q\E分別是正則表達式中文字串的開始和結束;他們指示正則表達式引擎不會將這兩個「標記」之間的文本解釋爲正則表達式。

例如,爲了匹配兩顆星星,你可以在你的正則表達式有這樣的:

\Q**\E 

這將匹配兩個字面明星,而不是試圖將其解釋爲「零或多個」量詞。

另外,這樣做,而不是手工就像在你的代碼寫這篇的更便攜的解決辦法是使用Pattern.quote

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

\Q\E分隔符是引用的文字。

documentation

\Q

Nothing,但是引用所有字符,直到。\ E

\E

沒什麼,但最終報價由\ Q開始

0

在正則表達式中,\ Q和\ E的所有字符轉義

所以..當你有一個字符串匹配,如果它包含特殊字符的正則表達式,你把\Q\E中的字符串可以直接匹配它們。