\和\\在java里真的是很难理解的逻辑,刚开始学习正则的时候一直不明白这哥俩有啥区别,听老师讲也是云里雾里的,下面写一点自己的感悟吧
java中\表示转义,因为java中有些特殊字符不可以直接表示,例如",',换行\r,\n等等之类,所以一个\加上你需要表示的那个特殊字符就可以代指这个特殊字符.
例如: \. 表示的就是字符"." 而不会变成字符"\."
而如果想表示一个正常的\该怎么表示呢,答案是将这个反斜杠也转义,套用上面公式就是\\
光会了这个小技巧并没有什么卵用,我们最终的目标是在正则里使用啊,而JAVA的正则语法里有些比如 \d 表示数字 \w表示字母,上面已经说了\\表示一个普通的\,而一个\则会将其后的特殊字符转义,显然d和w都不是特殊字符,所以用在这里会出错,正确的表示应该是\\d 和\\w
还是不理解?
这里可以吧 \d 或者\w 看做两个字符的组合,也就是说正则表达式的最终匹配形式必须是以这种\d 或\w的形式
,而java的一个反斜杠\d 或一个反斜杠\w 的形式会将其转义,但是d,w又不是特殊字符,所以编译不通过
\\d 和\\w 的形式 到正则表达式里会被转成 \d, \w 正好符合 正则表达式的语法,通过.
这里附上一个公式 : java字符串正则表达式--(将\\转义成\,将\和其后面字符转义)--> 正则语法