這個正則表達式為什么會有兩個反斜杠?
"^.*?\\.(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}), 輸出結果少了一個 反斜杠,說明索引號字符串中的\\會轉義!
