正則表達式,字符串中需要兩個反斜杠“\d”
阿新 • • 發佈:2017-08-29
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”