String上可以使用正則表達式的操做,其實是利用了java.util.regex.Pattern與java.util.regex.Matcher的功能。當調用String的matches()方法時,其實是調用Pattern的靜態方法matches(),這個方法會返回boolean值,表示字符串是否符合正則表達式。
若是想要將正則表達式視爲一個對象來重複使用,能夠使用Pattern的靜態方法compile()進行編譯。compile()方法會返回一個Pattern的實例,這個實例表明正則表達式,以後就能夠重複使用Pattern實例的matcher()方法來返回一個Matcher的實例,表明符合正則式的實例,這個實例上有一些尋找符合正則式條件的方法可供操做。範例6.11做了示範。
** 範例6.11UsePatternMatcher.java
import java.util.regex.*;
public class UsePatternMatcher {
public static void main(String[] args) {
String phones1 =
"Justin 的手機號碼:0939-100391\n" +
"momor 的手機號碼:0939-666888\n";
Pattern pattern = Pattern.compile(".*0939-\\d{6}");
Matcher matcher = pattern.matcher(phones1);
while(matcher.find()) {
System.out.println(matcher.group());
}
String phones2 =
"caterpillar 的手機號碼:0952-600391\n" +
"bush 的手機號碼:0939-550391";
matcher = pattern.matcher(phones2);
while(matcher.find()) {
System.out.println(matcher.group());
}
}
}
範例6.11會尋找手機號碼爲0939開頭的號碼,假設號碼來源不止一個(如phones一、phones2),則能夠編譯好正則表達式並返回一個Pattern對象,以後就能夠重複使用這個Pattern對象,在比對時使用matcher()返回符合條件的Matcher實例。find()方法表示是否有符合的字符串,group()方法則能夠將符合的字符串返回。程序的執行結果以下:
Justin 的手機號碼:0939-100391
momor 的手機號碼:0939-666888
bush 的手機號碼:0939-550391
下面使用Pattern與Matcher改寫範例6.9,讓程序能夠返回符合正則式的字符串,而不是返回不符合的字符串。
** 範例6.12RegularExpressionDemo2.java
import java.util.regex.*;
public class RegularExpressionDemo2 {
public static void main(String[] args) {
String text = "abcdebcadxbc";
Pattern pattern = Pattern.compile(".bc");
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println(matcher.group());
}
System.out.println();
}
}
style='font-family:宋體'>執行結果:
abc
ebc
xbcjava