1. 程式人生 > >正則表達式,字符串中需要兩個反斜杠“\d”

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

pattern blog text this 輸出 create 直接 out 兩個

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

"^.*?\\.(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}), 輸出結果少了一個 反斜杠,說明索引號字符串中的\\會轉義!

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