Java正則表達式
Java提供了java.util.regex包的模式正則表達式匹配。 Java正則表達式是非常相似的Perl編程語言,很容易學習。
正則表達式是一個字符的特殊序列,可以幫助您匹配或查找其他字符串或字符串集,使用的模式舉行了專門的語法。它們可以被用於搜索,編輯或處理文本和數據。
在java.util.regex包主要包括以下三類:
-
Pattern 類: Pattern對象是一個正則表達式的編譯表示。 Pattern類不提供公共構造函數。要創建一個模式,必須首先調用其公共靜態編譯的方法之一,這將返回一個Pattern對象。這些方法接受一個正則表達式作為第一個參數。
-
Matcher 類: Matcher對象是解釋模式,並執行對輸入字符串匹配操作的引擎。像Pattern類,匹配器定義冇有公共的構造函數。通過調用一個Pattern對象的匹配方法獲得一個Matcher對象。
-
PatternSyntaxException: PatternSyntaxException對象是一個未經檢查的異常,表明正則表達式模式中的語法錯誤.
捕獲組:
捕獲組是一種方法處理多種字符作為一個單一的單元。他們被放置到一組括號內分組字符創建。例如,正則表達式(dog)創建一個包含字母"d", "o" 和 "g" 的一個組。 .
捕獲組是由左至右計數的左括號的編號。例如,表達式((A)(B(C)))有四個這樣的組:
-
((A)(B(C)))
-
(A)
-
(B(C))
-
(C)
要找出有多少組出現在表達式,調用一個匹配對象的groupCount方法。groupCount方法返回一個int表示目前在匹配器模式的捕獲組數.
還有一個特彆的組,組0,它始終代表整個表達式。此組中不包括所報告groupCount的總和。
例子:
下麵的例子說明如何找到從給定的字母數字字符串,一個數字串:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // String to be scanned to find the pattern. String line = "This order was placed for QT3000! OK?"; String pattern = "(.*)(\d+)(.*)"; // Create a Pattern object 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) ); } else { System.out.println("NO MATCH"); } } }
這將產生以下結果:
Found value: This order was placed for QT3000! OK? Found value: This order was placed for QT300 Found value: 0
正則表達式語法
這裡的表中列出了所有的正則表達式元字符,並可在Java中的語法:
子表達式 | 匹配 |
---|---|
^ | 匹配一行的開始. |
$ | 匹配一行的結尾. |
. | 匹配除換行符外的任何單個字符。使用m選項允許它匹配換行符. |
[...] | 匹配括號中的任何單個字符. |
[^...] | 匹配非括號中的任何單個字符 |
A | 整個字符串的開頭 |
z | 整個字符串的結尾 |