正則表達式,字符串中需要兩個反斜杠“\\d”


這個正則表達式為什么會有兩個反斜杠?

"^.*?\\.(jpg|png|bmp|gif)$"上面這個正則表達式為什么有兩個反斜杠呢?反斜杠點\.就能表示點.了,為什么還要在\.前面多加一個\?

-----------------

這要分兩步
首先字符串中的\\被編譯器解釋為\         -------》  第一步,編譯器將字符串轉變為“正則表達式”
然后作為正則表達式,\.又被正則表達式引擎解釋為.   ----------------> 第二步,才開始把第一步的結果當做是正則表達式,開始進行匹配!

如果在字符串里只寫\.的話,第一步就被直接解釋為.,之后作為正則表達式被解釋時就變成匹配任意字符了

 

 

     String line = "This order was placed for QT30012!bmmmb OK?8976a";
        String pattern = "(\\d{2,3})";

        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);
        if (m.find()) {
            System.out.println("Found value: " + m.group(0));
        }else{
             System.out.println("NO MATCH");
        }        

  

 -------------------------------------------------------------------------2017年8月29日20:31:49 補充------------------------------------

驗證一下,我們的“兩步論!”

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Sa {

    public static void main(String args[]) {
        // String to be scanned to find the pattern.
        String line = "This order was placed for QT30012!bmmmb OK?8976a";
        String pattern = "(\\d{2,3})";

        System.out.println(pattern);

/*        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(line);
        if (m.find()) {
            System.out.println("Found value: " + m.group(0));
            System.out.println("Found value: " + m.group(1));
            System.out.println("Found value: " + m.group(2));
            System.out.println("Found value: " + m.group(3));
        } else {
            System.out.println("NO MATCH");
        }
     */
    }   
}

  

 代碼中是 (\\d{2, 3}), 輸出結果少了一個 反斜杠,說明索引號字符串中的\\會轉義!


免責聲明!

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



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