首先,咱们须要知道在java字符串和正则表达式中,“\”都具备特殊的含义。java
(一)表明特殊字符:\t表明制表符,\n表明换行....等。正则表达式
(二)表明转义,在字符串中,若是出现” ‘ \,会形成代码歧义,如:数组
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )spa
这时,就须要在形成歧义的字符前加\,来告诉编译器:这个字符只是一个普通字符。blog
会形成歧义的有 \ ' "当咱们想让他们表明普通字符的时候就须要变成\\ \' \"字符串
(一)表明特殊功能的字符:如\d表明数组编译器
(二)表明转义,和上面同样,当出现字符歧义时,加上\表示普通字符。编译
知道了原理,问题就好解释了:class
由于" \ "号的在正则中被赋予了特殊含义,因此当咱们想在正则中匹配”\”时,须要加上转义变成了“\\"。原理
在java字符串中,若是想表示两个普通字符“\\”,一样须要为”\”加上转义字符,变成了“\\\\”。
因此当咱们想在java中使用正则表达式匹配"\"时,就须要写成"\\\\"