2013-05-30 71 views
-2

嗨,我想分裂一個字符串分隔垂直酒吧。例如:java的正則表達式轉義字符

String str = "a=1|b=2"; 

在java中,我們應該做的是這樣的:

str.split("\\|"); 

如果我使用單斜線:

str.split("\|"); 

編譯器會發出錯誤:

無效的轉義序列(有效的轉義序列是\ b \ t \ n \ f \ r \「\'\)

任何人都可以解釋爲什麼會發生這種情況嗎?謝謝!

+2

'|'符號在正則表達式中有特殊含義,所以它需要被轉義。由於反斜槓字符_also_在字符串中具有特殊含義(它是一個轉義字符),因此它也需要在其中轉義。所以......你需要在你的正則表達式中使用兩個'\'符號。這個網站上已經涵蓋了很多次。 – jahroy

回答

4

反斜槓\是一個特殊字符。在Java世界中,它被用來逃避角色。

管道|是正則表達式世界中的一個特殊字符,意思是「」。

要使用管道作爲分隔符,您需要將其轉義(因此可以在正則表達式分析過程中識別它),因此您需要在您的正則表達式中獲得此代碼:\|

但作爲backshlash是Java和您正在使用一個String對象特殊字符,你必須轉義反斜線,因此它可以被解釋爲最終的預期最終結果:\|

要做到這一點,你簡單地用另一個反斜槓轉義反斜槓:\\|

第一個反斜槓轉義轉義管道(正則表達式要求)的第二個反斜槓(java要求)。

1

在Java字符串中,反斜槓需要用另一個反斜槓進行轉義。所以,雖然正則表達式的「規範」形式確實是\|,但是作爲Java字符串,這必須寫成"\\|"