java.util.regex 包主要包括以下三個類:
- Pattern 類:
pattern 物件是一個正則運算式的編譯表示,Pattern 類沒有公共構造方法,要創建一個 Pattern 物件,你必須首先呼叫其公共靜態編譯方法,它回傳一個 Pattern 物件,該方法接受一個正則運算式作為它的第一個引數,
- Matcher 類:
Matcher 物件是對輸入字串進行解釋和匹配操作的引擎,與Pattern 類一樣,Matcher 也沒有公共構造方法,你需要呼叫 Pattern 物件的 matcher 方法來獲得一個 Matcher 物件,
- PatternSyntaxException:
PatternSyntaxException 是一個非強制例外類,它表示一個正則運算式模式中的語法錯誤,
以下實體中使用了正則運算式 .*runoob.* 用于查找字串中是否包了 runoob 子串:
1 import java.util.regex.*; 2 3 class RegexExample1{ 4 public static void main(String[] args){ 5 String content = "I am noob " + 6 "from runoob.com."; 7 8 String pattern = ".*runoob.*"; 9 10 boolean isMatch = Pattern.matches(pattern, content); 11 System.out.println("字串中是否包含了 'runoob' 子字串? " + isMatch); 12 } 13 }
實體輸出結果為:
字串中是否包含了 'runoob' 子字串? true捕獲組
捕獲組是把多個字符當一個單獨單元進行處理的方法,它通過對括號內的字符分組來創建,
例如,正則運算式 (dog) 創建了單一分組,組里包含"d","o",和"g",
捕獲組是通過從左至右計算其開括號來編號,例如,在運算式((A)(B(C))),有四個這樣的組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
可以通過呼叫 matcher 物件的 groupCount 方法來查看運算式有多少個分組,groupCount 方法回傳一個 int 值,表示matcher物件當前有多個捕獲組,
還有一個特殊的組(group(0)),它總是代表整個運算式,該組不包括在 groupCount 的回傳值中,
實體
下面的例子說明如何從一個給定的字串中找到數字串:
1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class RegexMatches 5 { 6 public static void main( String[] args ){ 7 8 // 按指定模式在字串查找 9 String line = "This order was placed for QT3000! OK?"; 10 String pattern = "(\\D*)(\\d+)(.*)"; 11 12 // 創建 Pattern 物件 13 Pattern r = Pattern.compile(pattern); 14 15 // 現在創建 matcher 物件 16 Matcher m = r.matcher(line); 17 if (m.find( )) { 18 System.out.println("Found value: " + m.group(0) ); 19 System.out.println("Found value: " + m.group(1) ); 20 System.out.println("Found value: " + m.group(2) ); 21 System.out.println("Found value: " + m.group(3) ); 22 } else { 23 System.out.println("NO MATCH"); 24 } 25 } 26 }
以上實體編譯運行結果如下:
Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?
正則運算式語法
在其他語言中,\\ 表示:我想要在正則運算式中插入一個普通的(字面上的)反斜杠,請不要給它任何特殊的意義,
在 Java 中,\\ 表示:我要插入一個正則運算式的反斜線,所以其后的字符具有特殊的意義,
所以,在其他的語言中(如 Perl),一個反斜杠 \ 就足以具有轉義的作用,而在 Java 中正則運算式中則需要有兩個反斜杠才能被決議為其他語言中的轉義作用,也可以簡單的理解在 Java 的正則運算式中,兩個 \\ 代表其他語言中的一個 \,這也就是為什么表示一位數字的正則運算式是 \\d,而表示一個普通的反斜杠是 \\,
System.out.print("\\"); // 輸出為 \ System.out.print("\\\\"); // 輸出為 \\
正則運算式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯,
給定一個正則運算式和另一個字串,我們可以達到如下的目的:
- 1. 給定的字串是否符合正則運算式的過濾邏輯(稱作"匹配");
- 2. 可以通過正則運算式,從字串中獲取我們想要的特定部分,
正則運算式的特點是:
- 1. 靈活性、邏輯性和功能性非常的強;
- 2. 可以迅速地用極簡單的方式達到字串的復雜控制,
- 3. 對于剛接觸的人來說,比較晦澀難懂,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549021.html
標籤:其他
