JAVA每日總結2021.10.14
正則表示式定義了字串的模式。
正則表示式可以用來搜尋、編輯或處理文字。
正則表示式並不僅限於某一種語言,但是在每種語言中有細微的差別。
正則表示式例項
一個字串其實就是一個簡單的正則表示式,例如Hello World正則表示式匹配 "Hello World" 字串。
.(點號)也是一個正則表示式,它匹配任何一個字元如:"a" 或 "1"。
下表列出了一些正則表示式的例項及描述:
正則表示式 | 描述 |
---|---|
this is text |
匹配字串 "this is text" |
this\s+is\s+text |
注意字串中的\s+。 匹配單詞 "this" 後面的\s+可以匹配多個空格,之後匹配 is 字串,再之後\s+ 可以匹配這個例項:this is text |
^\d+(\.\d+)? |
^ 定義了以什麼開始 \d+ 匹配一個或多個數字 ? 設定括號內的選項是可選的 \. 匹配 "." 可以匹配的例項:"5", "1.5" 和 "2.21"。 |
Java 正則表示式和 Perl 的是最為相似的。
java.util.regex 包主要包括以下三個類:
- Pattern 類:
pattern 物件是一個正則表示式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 物件,你必須首先呼叫其公共靜態編譯方法,它返回一個 Pattern 物件。該方法接受一個正則表示式作為它的第一個引數。
- Matcher 類:
Matcher 物件是對輸入字串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要呼叫 Pattern 物件的 matcher 方法來獲得一個 Matcher 物件。
- PatternSyntaxException:
PatternSyntaxException 是一個非強制異常類,它表示一個正則表示式模式中的語法錯誤。
以下例項中使用了正則表示式.*runoob.*用於查詢字串中是否包了runoob子串:
例項
import java.util.regex.*; class RegexExample1{ public static void main(String[] args){ String content = "I am noob " + "from runoob.com."; String pattern = ".*runoob.*"; boolean isMatch = Pattern.matches(pattern, content); System.out.println("字串中是否包含了 'runoob' 子字串? " + isMatch); } }例項輸出結果為:
字串中是否包含了 'runoob' 子字串? true捕獲組
捕獲組是把多個字元當一個單獨單元進行處理的方法,它通過對括號內的字元分組來建立。
例如,正則表示式 (dog) 建立了單一分組,組裡包含"d","o",和"g"。
捕獲組是通過從左至右計算其開括號來編號。例如,在表示式((A)(B(C))),有四個這樣的組:
- ((A)(B(C)))
- (A)
- (B(C))
- (C)
可以通過呼叫 matcher 物件的 groupCount 方法來查看錶達式有多少個分組。groupCount 方法返回一個 int 值,表示matcher物件當前有多個捕獲組。
還有一個特殊的組(group(0)),它總是代表整個表示式。該組不包括在 groupCount 的返回值中。