Java學習日誌14.09(第一階段基礎)
2018.10.24 晴
14.09_常見物件(Pattern和Matcher的概述)
java.util.regex.Pattern
Pattern
正則表示式的編譯表示形式。
指定為字串的正則表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立 Matcher 物件,依照正則表示式,該物件可以與任意字元序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。
因此,典型的呼叫順序是
Pattern p = Pattern.compile(“a*b”); // 獲取正則表示式
Matcher m = p.matcher(“aaaaab”); //獲取匹配器
boolean b = m.matches(); // 將字串與正則表示式進行匹配
在僅使用一次正則表示式時,可以方便地通過此類定義 matches 方法。此方法編譯表示式並在單個呼叫中將輸入序列與其匹配。語句
boolean b = Pattern.matches(“a*b”, “aaaaab”);
等效於上面的三個語句,儘管對於重複的匹配而言它效率不高,因為它不允許重用已編譯的模式。
此類的例項是不可變的,可供多個併發執行緒安全使用。Matcher 類的例項用於此目的則不安全。
public final class Matcher
通過解釋 Pattern 對 character sequence 執行匹配操作的引擎。
通過呼叫模式的 matcher 方法從模式建立匹配器。建立匹配器後,可以使用它執行三種不同的匹配操作:
matches 方法嘗試將整個輸入序列與該模式匹配。
lookingAt 嘗試將輸入序列從頭開始與該模式匹配。
find 方法掃描輸入序列以查詢與該模式匹配的下一個子序列。
其中的方法及功能:
(1)Pattern中的compile(String regex)
返回型別:static Pattern
將給定的正則表示式編譯到模式中
(2)Pattern 中的matcher(CharSequence input)
返回型別 :Matcher
建立匹配給定輸入與此模式的匹配器。
(3)Matcher 中的 matches()
嘗試將整個區域與模式匹配。
14.10_常見物件(正則表示式的獲取功能)
- A:正則表示式的獲取功能
- Pattern和Matcher的結合使用
- B:案例演示
- 需求:把一個字串中的手機號碼獲取出來
作用:可以在一堆字串中獲取到手機號碼或者郵箱等,可用於商業廣告的傳送(垃圾廣告,但是也會有人閱讀,是比較廉價有效的推廣方式之一)
分析:
(1)建立手機號碼正則表示式
(2)建立匹配器
(3)利用Matcher中的find()方法
作用:到指定字串中挨個找符合規則的字串
返回型別:boolean
(4)用Matcher中的group()
作用:返回以前所匹配到的子序列
返回型別:String
(5)利用while迴圈獲取全部(find相當於有一個指標)
- 需求:把一個字串中的手機號碼獲取出來
程式碼實現:
package com.heima.Regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class demo_10 {
public static void main(String[] args) {
String s = "我現在的號碼是13556540583,以前的號碼是15521113987,還用過號碼13426954875";
String regex = "1[234578]\\d{9}"; //手機號碼的正則表示式
Pattern p = Pattern.compile(regex); //獲取正則表示式
Matcher m = p.matcher(s); //獲取匹配器
while(m.find()) { //挨個字元進行拼配
System.out.println(m.group()); //匹配上就進行列印
}
}
}
程式結果:
13556540583
15521113987
13426954875