(瘋狂java講義)– 摘要 正則表達式是一個強大的字符串處理工具,可以對字符串進行 查找 提取 、分割、替換等操作。String類中也提供了諸如matches()、replaceAll()、replaceFirst()、split()等 Java還提供了Pattern和Matcher兩個類來專門用于提供正則表達式支持。
正則表達式所支持的合法字符:
x (可表示任何合法字符)/0mnn(8進制數0mnn所表示的字符)/xhh(16進制0xhh所表示的字符)/uhhhh(16進制值所表示的Unicode字符)/t(制表符)/n(換行符)/r(回車符)/f(換頁符)/a(報警)/e(Escape符)正則表達式的特殊字符: 注:要匹配如下的字符可加“/”
$ 匹配一行的結尾^ 匹配一行的開頭() 標記字表達式的開頭和結尾[] 確定中括號的開頭和結尾位置{} 標記前面字表達式的出現頻度 eg:“/w{3}”*字表達式出現0~+∞次?字表達是出現0~1次+字表達是出現1~+∞次.匹配除 /n 外單字符/ 轉義下一個字符通常在一個正則表達式中多次出現| 兩項之間任選一項=>or預定義字符:
/d 匹配0~9之間的數字/D 匹配非數字/s 匹配所有空白字符 eg:/t /n /f /r/S 匹配所有非空白字符/w 匹配所有單詞字符/W 匹配所有非單詞字符Pattern Matcher類
Pattern是不可變類可供多個并發線程安全使用 Matcher類提供的常用方法如下:
find() 返回目標字符串中是否包含與Pattern(模板)匹配的子串group() 返回上一次與Pattern匹配的子串start() 返回上一次與Pattern匹配的子串在目標字符串中的開始位置end() 返回上一次與Pattern匹配的子串在目標字符串中的結束位置+1lookingAt() 返回目標字符串前面部分與Pattern是否匹配matches() 返回整個目標字符串與Pattern是否匹配reset() 將現有的matcher對象應用于一個新的字符串序列public class JavaTest { public static void main(String[] args) { String str = "我想購買一本《瘋狂JAVA講義》,盡快聯系我13500006666," + "范德薩發集合地少廢話代課老師13611125565" + "范德薩發大水發的撒范德薩范德薩15899903312"; Matcher m = java.util.regex.Pattern.compile("((13//d)|(15//d))//d{8}").matcher(str); while (m.find()){ System.out.PRintln(m.group()); } }}*運行結果為: 13500006666 13611125565 15899903312*
public class StartEnd { public static void main(String[] args) { String regStr = "Java Is My Love"; Matcher matcher = Pattern.compile("http://w+").matcher(regStr); while (matcher.find()) { System.out.println(matcher.group() + "子串起始位置" + matcher.start() + "子串結束位置" + matcher.end()); } }}*運行結果: Java子串起始位置0子串結束位置4 Is子串起始位置5子串結束位置7 My子串起始位置8子串結束位置10 Love子串起始位置11子串結束位置15*
*注:上段代碼是對單詞進行分割
public class StringReg { public static void main(String[] args) { String[] msgs = { "Java has regular expressions in 1.4", "regular expressions now expressing in java", "java represses oracular expressions" }; for (String msg : msgs) { System.out.println(msg.replaceFirst("re//w*", "哈哈:)")); System.out.println(Arrays.toString(msg.split(" ")) + "/n"); } }}*運行結果: [Java, has, regular, expressions, in, 1.4]
哈哈:) expressions now expressing in java [regular, expressions, now, expressing, in, java]
java 哈哈:) oracular expressions [java, represses, oracular, expressions]*
*注:Arrays 類中的靜態方法 Arrays.toString()
public class ReplaceTest { public static void main(String[] args) { String[] msgs = { "Java has regular expressions in 1.4", "regular expressions now expressing in java", "java represses oracular expressions" }; Pattern p = Pattern.compile("re//w*"); Matcher matcher = null; for (String msg : msgs) { if (matcher == null){ matcher = p.matcher(msg); }else{ matcher.reset(msg); } System.out.println(matcher.replaceAll("哈哈:)")); } }}*運行結果: Java has 哈哈:) exp哈哈:) in 1.4 哈哈:) exp哈哈:) now exp哈哈:) in java java 哈哈:) oracular exp哈哈:)*
*注:此段代碼是用來替換符合re開頭的單詞為–>[ 哈哈:) ]
public static void main(String[] args) { String[] mails = { "kongyeeku@q63.com", "kongyeeku@gmile.com", "liguang@crazyit.org", "wawa@abc.com" }; String mailRegEx = "http://w{3,20}@//w+//.(com|org|cn|net|gov)"; Pattern mailPattern = Pattern.compile(mailRegEx); Matcher matcher = null; for (String mail : mails) { if (matcher == null) { matcher = mailPattern.matcher(mail); } else { matcher.reset(mail); } String result = mail + "/t" + (matcher.matches() ? "yes" : "no") + "/n一個有效的郵箱地址"; System.out.println(matcher + "/t" + result); } }}*運行結果為: java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,17 lastmatch=kongyeeku@q63.com] kongyeeku@q63.com yes 一個有效的郵箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,19 lastmatch=kongyeeku@gmile.com] kongyeeku@gmile.com yes 一個有效的郵箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,19 lastmatch=liguang@crazyit.org] liguang@crazyit.org yes 一個有效的郵箱地址 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,12 lastmatch=wawa@abc.com] wawa@abc.com yes 一個有效的郵箱地址*
*注:Matcher的結果在控制臺輸出的是類似于 java.util.regex.Matcher[pattern=/w{3,20}@/w+.(com|org|cn|net|gov) region=0,17 lastmatch=kongyeeku@q63.com]這樣的字符串
|
新聞熱點
疑難解答