首先,我們需要知道在java字符串和正則表達式中,“\”都具有特殊的含義。
一、在Java的字符串中"\"有兩個功能
(一)代表特殊字符:\t代表制表符,\n代表換行....等。
(二)代表轉義,在字符串中,如果出現” ‘ \,會造成代碼歧義,如:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
這時,就需要在造成歧義的字符前加\,來告訴編譯器:這個字符只是一個普通字符。

會造成歧義的有 \ ' "當我們想讓他們代表普通字符的時候就需要變成\\ \' \"
二、在正則中”\”同樣被賦予了兩個功能
(一)代表特殊功能的字符:如\d代表數組
(二)代表轉義,和上面一樣,當出現字符歧義時,加上\表示普通字符。
三、總結
知道了原理,問題就好解釋了:
因為" \ "號的在正則中被賦予了特殊含義,所以當我們想在正則中匹配”\”時,需要加上轉義變成了“\\"。
在java字符串中,如果想表示兩個普通字符“\\”,同樣需要為”\”加上轉義字符,變成了“\\\\”。
所以當我們想在java中使用正則表達式匹配"\"時,就需要寫成"\\\\"
