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