關於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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM