Pattern和Matcher
Java.util.regex 是一個用正則表達式所訂製的模式來對字符串進行匹配工做的類庫包。它包括兩個類:Pattern和Matcher
Pattern: 一個Pattern是一個正則表達式經編譯後的表現模式。
Matcher: 一個Matcher對象是一個狀態機器,它依據Pattern對象作爲匹配模式對字符串展開匹配檢查。java
Pattern類
經常使用方法:
static Pattern compile(String regex) 將給定的正則表達式編譯並賦予給Pattern類
static Pattern compile(String regex, int flags) flag參數的指定,可選的flag參數包括:CASE INSENSITIVE,MULTILINE,DOTALL,UNICODE CASE, CANON E
int flags() 返回當前Pattern的匹配flag參數.
[java] view plain copy print?在CODE上查看代碼片派生到個人代碼片
Pattern.CANON_EQ,當且僅當兩個字符的"正規分解(canonical decomposition)"都徹底相同的狀況下,才認定匹配。 正則表達式
Pattern.CASE_INSENSITIVE(?i) 默認狀況下,大小寫不敏感的匹配只適用於US-ASCII字符集。這個標誌能讓表達式忽略大小寫進行匹配。 app
Pattern.COMMENTS(?x)在這種模式下,匹配時會忽略(正則表達式裏的)空格字符(不是指表達式裏的"\s",而是指表達式裏的空格,tab,回車之類)。 測試
Pattern.DOTALL(?s)在這種模式下,表達式'.'能夠匹配任意字符,包括表示一行的結束符。 默認狀況下,表達式'.'不匹配行的結束符。 code
Pattern.MULTILINE(?m)在這種模式下,'^'和'$'分別匹配一行的開始和結束。
此外,'^'仍然匹配字符串的開始,'$'也匹配字符串的結束。默認狀況下,這兩個表達式僅僅匹配字符串的開始和結束。 對象
Pattern.UNICODE_CASE(?u)在這個模式下,若是你還啓用了CASE_INSENSITIVE標誌,
那麼它會對Unicode字符進行大小寫不明感的匹配。默認狀況下,大小寫不敏感的匹配只適用於US-ASCII字符集。 索引
Pattern.UNIX_LINES(?d)在這個模式下,只有'n'才被認做一行的停止,而且與'.','^',以及'$'進行匹配。 字符串
Matcher matcher(CharSequence input) 生成一個給定命名的Matcher對象
[java] view plain copy print?在CODE上查看代碼片派生到個人代碼片
Pattern p = Pattern.compile("《(.*)》");
Matcher m = p.matcher("《測試》匹配書名號中間的內容");
while (m.find()) {input
System.out.println(m.group(1));
} it
static boolean matches(String regex, CharSequence input)
String[] split(CharSequence input) 將目標字符串按照Pattern裏所包含的正則表達式爲模進行分割。
String[] split(CharSequence input, int limit) 做用同上,增長參數limit目的在於要指定分割的段數
[java] view plain copy print?在CODE上查看代碼片派生到個人代碼片
Pattern p = Pattern.compile("\|");
String[] arr = p.split("woshishen|sadsadsa");
System.out.println(arr[0] + "----" + arr[1]);
Matcher類
Matcher appendReplacement(StringBuffer sb, String replacement) 將當前匹配子串替換爲指定字符串,而且將替換後的子串以及其以前到上次匹配子串以後的字符串段添加到一個StringBuffer對象裏。
StringBuffer appendTail(StringBuffer sb) 將最後一次匹配工做後剩餘的字符串添加到一個StringBuffer對象裏。
int end() 返回當前匹配的子串的最後一個字符在原目標字符串中的索引位置 。
int end(int group) 返回與匹配模式裏指定的組相匹配的子串最後一個字符的位置。
boolean find() 嘗試在目標字符串裏查找下一個匹配子串。
boolean find(int start) 重設Matcher對象,而且嘗試在目標字符串裏從指定的位置開始查找下一個匹配的子串。
String group() 返回當前查找而得到的與組匹配的全部子串內容
String group(int group) 返回當前查找而得到的與指定的組匹配的子串內容
int groupCount() 返回當前查找所得到的匹配組的數量。
boolean lookingAt() 檢測目標字符串是否以匹配的子串起始。
boolean matches() 嘗試對整個目標字符展開匹配檢測,也就是隻有整個目標字符串徹底匹配時才返回真值。
Pattern pattern() 返回該Matcher對象的現有匹配模式,也就是對應的Pattern 對象。
String replaceAll(String replacement) 將目標字符串裏與既有模式相匹配的子串所有替換爲指定的字符串。
String replaceFirst(String replacement) 將目標字符串裏第一個與既有模式相匹配的子串替換爲指定的字符串。
Matcher reset() 重設該Matcher對象。
Matcher reset(CharSequence input) 重設該Matcher對象而且指定一個新的目標字符串。
int start() 返回當前查找所獲子串的開始字符在原目標字符串中的位置。
int start(int group) 返回當前查找所得到的和指定組匹配的子串的第一個字符在原目標字符串中的位置。
[java] view plain copy print?在CODE上查看代碼片派生到個人代碼片
Pattern p = Pattern.compile("(第(.+)部)");
Matcher m = p.matcher("大宋提刑官 第1");
while (m.find()) {
System.out.println(m.start()); //返回當前查找所獲子串的開始字符在原目標字符串中的位置。 System.out.println(m.end()); //返回與匹配模式裏指定的組相匹配的子串最後一個字符的位置。 System.out.println(m.group(2)); //返回當前查找而得到的與指定的組匹配的子串內容
}