关于Java正则和转义中\\和\\\\的理解
定义
一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。
转义就是指转换该字符的原本意义,从而变成另外的意义。
\作为Java的转义字符
1.在java字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如换行(\n)、回车符(\r)、制表符(\t)。
2.在java中以下字符都有特殊意义,无法直接表示
单引号:char c = 'a'; 表示字符类型的数据时需要使用单引号将字符左右括起来。所以要表示字符'则需要使用\'
双引号:String str = "abc"; 表示字符串类型的数据时需要使用双引号将字符串左右括起来。要表示字符串"则需要\"
特殊情况:因为java表示为\:String str = "\\" ; 表示双引号为:String str = "\" "; 所以想表示\"需要前面两个组合起来为String str = "\\\"";前两个\\表示\,后面\" 表示" ;
这个特殊情况在表示json字符串的时候经常用到,而不是json对象,例如json字符串:
{ "test1": "{\"test2\": \"val2\" }" }
// 其中json字符串test1的值是一个字符串,而不是一个{}对象,中间就会包含\"
java中定义该字段需要如下定义:String str = "{ \"test1\" : \" { \\\"test2\\\": \\\"val2\\\" }\" }"; 其中的\\\" 就会转义为\"
这个str就可以在java中通过JSONObject进行反序列化了;
反斜杠:String regex = "你好\n\t棒"; 在java代码中\表示转义字符,所以如果要表示字面意思的\,则需要使用\\
所以用反斜杠加上本身字符来进行表示。
\在正则表达式中
\表示将下一字符标记为特殊字符。如\d表示数字字符匹配,等效于 [0-9]。\w表示匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
\\中的第一个\表示java的转义字符\由编译器解析,第二个\是正则表达式\由正则表达式引擎解析。
Java正则表达式中匹配一个普通的反斜杠是\\\\
注意观察下图中的静态代码中的变量定义和运行中的内存变量之间的区别。
代码
package com.lingyejun.authenticator; import java.util.regex.Pattern; public class RegexTest { public static void main(String[] args) { // 正则表达式中\\\\匹配一个\ boolean flg = Pattern.matches("\\\\","\\"); System.out.println(flg); char a = 'a'; String b = "abc"; String c = "你好\n\t棒"; System.out.println(c); char d = '\''; String e = "\""; System.out.println(d); System.out.println(e); String f ="\\"; System.out.println(f); String j = "\\\\"; System.out.println(f + j); String h = "{\"name\":\"翎野君\"}"; System.out.println(h); String g = "{\\\"age\\\":\\\"99\\\"}"; System.out.println(g); String k = g.replaceAll("\\\\",""); System.out.println(k); } }
转载:https://www.cnblogs.com/lingyejun/p/11337141.html
https://blog.csdn.net/abcwywht/article/details/53141698