这个正则表达式为什么会有两个反斜杠?
"^.*?\.(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}), 输出结果少了一个 反斜杠,说明索引号字符串中的\会转义!