爲什麼“java正則表達式中匹配一個反斜槓要用四個反斜槓”,java正則表達式爲啥用兩個\\表示一個\

爲什麼“java正則表達式中匹配一個\要用\\\\


首先我們知道在正則表達式中\代表轉義,而java中\也代表轉義(一些字母前加\來表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,就稱爲轉義字符1)。

根據“jdk API中的原話:根據 Java Language Specification 的要求,Java 源代碼的字符串中的反斜線被解釋爲 Unicode 轉義或其他字符轉義。因此必須在字符串字面值中使用兩個反斜線,表示正則表達式受到保護,不被 Java 字節碼編譯器解釋。”2

根據“thinking中的一段話:如果在其他語言中使用過正則表達式,那你就立刻能發現Java對反斜線\的不同處理.在其他語言中,\表示"我想要在正則表達式中插入一個普通的(字面上的)反斜線,請不要給他任何特殊的意義."而在Java中,\的意思是"我要插入一個正則表達式的反斜線,所以其後的字符具有特殊的意義."例如,如果你想表示一位數字,那麼正則表達式應該是\d.如果你想插入一個普通的反斜線,則應該這樣用\\.不過換行和製表符之類的東西只需使用單反斜線:\n\t. ”2

也就是java解釋字符串時,正則表達式受到保護(可以這樣理解:先由java解釋器解釋字符串,然後再由正則表達式解釋器解釋正則表達式),

那麼

String pattern = "a\\\\b";

首先被java解釋器解釋爲“a\b”(第一個和第三個\代表轉義,此時正則表達式受到保護,不被解釋),再被正則解釋器解釋爲"a\b"。即java中由4個\表示一個\。也就是他文中所說的java正則表達式被解釋兩次。

其他java正則表達式用法請見Java 正則表達式


  1. https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin ↩︎

  2. https://ask.csdn.net/questions/258144 ↩︎ ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章