欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java正則表達式之Pattern和Matcher的使用

 更新時間:2024年09月20日 09:52:50   作者:似霰  
本文詳細介紹了Java中處理正則表達式的Pattern和Matcher類的使用方法和實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

之前簡單分析了Java正則表達式的基礎(chǔ)用法和部分規(guī)則:String.matches方法使用

今天來看一下常用來處理正則表達式的兩個類:

  • Pattern  包名:java.util.regex.Pattern;

Pattern 類用于表示一個正則表達式的編譯版本。通過 Pattern.compile() 方法可以將一個正則表達式編譯成一個 Pattern 對象。
Pattern 類提供了一系列靜態(tài)方法用于編譯和匹配正則表達式,例如 compile()、matches()、split() 等。
通過 Pattern 對象可以獲取正則表達式的相關(guān)信息,例如正則表達式的字符串表示、標志位等。

  • Matcher  包名:java.util.regex.Matcher;

Matcher 類用于對輸入字符串進行匹配操作。它通過 Pattern.matcher() 方法創(chuàng)建,并用于對指定的輸入字符串執(zhí)行匹配操作。
Matcher 類提供了一系列方法用于執(zhí)行匹配操作,例如 matches()、find()、group() 等。
通過 Matcher 對象可以獲取匹配結(jié)果的相關(guān)信息,例如匹配的子字符串、匹配的位置等。

一、Pattern和Matcher的簡單使用

簡單例子代碼:

package com.example.Pattern;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest {

    public static void main(String[] args) {
        String input = "Hello, my age is 25 and my friend's age is 30.";

        // 定義正則表達式
        String regex = "\\d+"; // 匹配一個或多個數(shù)字

        // 編譯正則表達式為 Pattern 對象
        Pattern pattern = Pattern.compile(regex);

        // 創(chuàng)建 Matcher 對象,并使用正則表達式匹配輸入字符串
        Matcher matcher = pattern.matcher(input);

        // 查找匹配的數(shù)字
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }	
}

result:

在這里插入圖片描述

分析:\\d+是匹配1到n個數(shù)字,至于findgroup功能后面詳解,看樣子find方法匹配到就返回true,同時group方法返回捕獲到的內(nèi)容。帶著這個簡單的例子進入到兩個類的詳細分析。

二、Pattern詳解

2.1 Pattern 常用方法

2.1.1 compile(String regex)

compile(String regex):
compile 方法是 Pattern 類的靜態(tài)方法,用于將給定的正則表達式字符串編譯成一個 Pattern 對象。
該方法接受一個字符串參數(shù) regex,表示要編譯的正則表達式。
編譯成功后,將返回一個 Pattern 對象,可以用于后續(xù)的匹配操作。

示例: 上面已經(jīng)有了,不重復(fù)了。

2.1.2 matches(String regex, CharSequence input)

matches(String regex, CharSequence input):
matches 方法是 Pattern 類的靜態(tài)方法,用于嘗試將給定的正則表達式與整個輸入字符串進行匹配。
該方法接受一個字符串參數(shù) regex,表示要匹配的正則表達式,以及一個 CharSequence 參數(shù) input,表示要匹配的輸入字符串。
如果整個輸入字符串與正則表達式匹配成功,則返回 true;否則返回 false。

示例

public class PatternTest {

    public static void main(String[] args) {
        String input = "Hello, my age is 25 and my friend's age is 30.";

        // 定義正則表達式
        String regex = "\\d+"; // 匹配一個或多個數(shù)字
    
        System.out.println(Pattern.matches(regex, "2")); 
        
        System.out.println(Pattern.matches(regex, "20")); 
        
        System.out.println(Pattern.matches(regex, " ")); 
        
        System.out.println(Pattern.matches(regex, "1 2 3 4 ")); 
        
        System.out.println(Pattern.matches(regex, "abcd")); 
    }	
}

result:

在這里插入圖片描述

analysis:

字符串 “2” 符合正則表達式 “\d+”,它包含一個數(shù)字字符。
字符串 “20” 也符合正則表達式 “\d+”,它包含兩個數(shù)字字符。
字符串 " " 不符合正則表達式 “\d+”,它不包含任何數(shù)字字符。
字符串 "1 2 3 4 " 不符合正則表達式 “\d+”,它包含空格和數(shù)字字符,不是一個連續(xù)的數(shù)字字符串。
字符串 “abcd” 不符合正則表達式 “\d+”,它不包含任何數(shù)字字符。

2.1.3 split(CharSequence input)

split(CharSequence input):
split 方法用于根據(jù)正則表達式將輸入字符串分割成多個子字符串。
該方法接受一個 CharSequence 參數(shù) input,表示要分割的輸入字符串。
返回一個字符串?dāng)?shù)組,包含了根據(jù)正則表達式分割后的子字符串。

示例

  public static void main(String[] args) {
    	
    	 System.out.println("-------,測試--------");
    	 String text = "apple,banana,orange,pear";
         Pattern pattern = Pattern.compile(",");
         String[] result = pattern.split(text);
         for (String s : result) {
             System.out.println(s);
         }   
        
       	 System.out.println("-------\\d+測試--------");
    	 String text1 = "1234,banana,2234,pear";
         Pattern pattern1 = Pattern.compile("\\d+");
         String[] result1 = pattern1.split(text1);
         for (String s : result1) {
             System.out.println(s);
         } 
         
       	 System.out.println("-------\\d測試--------");
    	 String text2 = "1234,banana,2234,pear";
         Pattern pattern2 = Pattern.compile("\\d");
         String[] result2 = pattern2.split(text2);
         for (String s : result2) {
             System.out.println(s);
         }  
    }	

result:

在這里插入圖片描述

analysis:

字符串 “,” 截取了“,”,所以只剩下數(shù)字和字母。
字符串 “\d+” 截取了連續(xù)的數(shù)字,所以只剩下“,”和字母。
字符串 “\d"截取了單個的數(shù)字,所有相比于”\d+"有了很多換行符。

2.1.4 pattern()

pattern():
pattern 方法用于返回當(dāng)前 Pattern 對象所表示的正則表達式的字符串形式。
該方法不接受任何參數(shù),直接返回當(dāng)前 Pattern 對象的正則表達式字符串。

示例

    public static void main(String[] args) {

         Pattern pattern = Pattern.compile(",");
         String result = pattern.pattern();
         System.out.println(result);
 
         Pattern pattern1 = Pattern.compile("\\d+");
         String result1 = pattern1.pattern();
         System.out.println(result1);

         Pattern pattern2 = Pattern.compile("\\d");
         String result2 = pattern2.pattern();
         System.out.println(result2);
    }	

result:

在這里插入圖片描述

analysis:

該方法不接受任何參數(shù),直接返回當(dāng)前 Pattern 對象的正則表達式字符串。

2.1.5 matcher(CharSequence input)

matcher(CharSequence input):
matcher 方法用于創(chuàng)建一個 Matcher 對象,用于對指定的輸入字符串進行匹配操作。
該方法接受一個 CharSequence 參數(shù) input,表示要匹配的輸入字符串。
返回一個 Matcher 對象,可以用于后續(xù)的匹配操作。

示例

    public static void main(String[] args) {

    	Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對象
    	Matcher matcher = pattern.matcher("1234,banana,2234,pear"); // 使用 Pattern 對象創(chuàng)建 Matcher 對象
        System.out.println(pattern);
        System.out.println(matcher);
    }	

result:

在這里插入圖片描述

analysis:

Pattern.compile(“\d+”) 返回的是正則表達式 \d+ 的字符串表示形式。而 pattern.matcher(“1234,banana,2234,pear”) 返回的是 Matcher 對象的字符串表示形式,其中包含了正則表達式模式、匹配的區(qū)域和最后的匹配結(jié)果。

三、Matcher詳解

3.1 Matcher 常用方法

3.1.1 matches()

matches():
matches 方法嘗試將整個輸入字符串與模式進行匹配。
如果整個輸入字符串與模式匹配成功,則返回 true;否則返回 false。

示例

    public static void main(String[] args) {

    	Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對象
    	Matcher matcher = pattern.matcher("1234"); // 使用 Pattern 對象創(chuàng)建 Matcher 對象
    	System.out.println(matcher.matches());
    	
    	matcher = pattern.matcher("1234d");
    	System.out.println(matcher.matches());
    	
     	matcher = pattern.matcher("12.34");
    	System.out.println(matcher.matches());
    }	

result:

在這里插入圖片描述

analysis:

matcher.matches() 會嘗試對整個輸入字符串進行匹配,如果整個輸入字符串匹配成功,則返回 true,否則返回 false。
當(dāng)輸入字符串為 “1234” 時,由于整個字符串都是數(shù)字,匹配成功,因此輸出為 true。
當(dāng)輸入字符串為 “1234d” 時,由于字符串中包含非數(shù)字字符 “d”,匹配失敗,因此輸出為 false。
當(dāng)輸入字符串為 “12.34” 時,由于字符串中包含小數(shù)點 “.”,匹配失敗,因此輸出為 false。

3.1.2 find()

絕大多數(shù)情況下:find()和group()方法是搭配起來使用的。

find():
find 方法在輸入字符串中查找下一個匹配的子序列。
如果找到匹配的子序列,則返回 true;否則返回 false。

3.1.3 group()

group():
group 方法返回當(dāng)前匹配的子序列。
如果在調(diào)用 matches、find 等方法后找到了匹配的子序列,可以使用 group 方法獲取匹配的內(nèi)容。

示例

    public static void main(String[] args) {
    	Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對象
    	
    	Matcher matcher = pattern.matcher("1234,banana,2234,pear");

    	while (matcher.find()) {
    	    System.out.println("匹配的子序列:" + matcher.group());
    	}
    	
    	matcher = pattern.matcher("1234banana2234pear");
    	
    	while (matcher.find()) {
    	    System.out.println("匹配的子序列:" + matcher.group());
    	}
   	 	
    }

result:

在這里插入圖片描述

analysis:

非常簡單
find 方法在輸入字符串中查找下一個匹配的子序列。
group 方法返回當(dāng)前匹配的子序列。

3.1.4 start()

start():
start 方法返回當(dāng)前匹配的子序列的起始索引。
如果在調(diào)用 matches、find 等方法后找到了匹配的子序列,可以使用 start 方法獲取匹配子序列的起始索引。

3.1.5 end()

end():
end 方法返回當(dāng)前匹配的子序列的結(jié)束索引。
如果在調(diào)用 matches、find 等方法后找到了匹配的子序列,可以使用 end 方法獲取匹配子序列的結(jié)束索引。

示例

    public static void main(String[] args) {
    	Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對象
    	
    	Matcher matcher = pattern.matcher("1234,banana,2234,pear,911");
    	
    	while (matcher.find()) {
    	    System.out.println("匹配的子序列:" + matcher.group());
        	System.out.println("起始子序列:" + matcher.start());
        	System.out.println("結(jié)束子序列:" + matcher.end());
        	System.out.println();
    	}	 	
    }	

result:

在這里插入圖片描述

analysis:

第一個匹配的子序列為 “1234”,起始位置是 0,結(jié)束位置是 4。
第二個匹配的子序列為 “2234”,起始位置是 12,結(jié)束位置是 16。
第三個匹配的子序列為 “911”,起始位置是 22,結(jié)束位置是 25。

3.1.6 reset(CharSequence input)

reset(CharSequence input):
reset 方法將 Matcher 對象的狀態(tài)重置,使其可以重新在輸入字符串中進行匹配。
在重復(fù)使用 Matcher 對象進行匹配時,可以使用 reset ()方法清除之前的匹配狀態(tài)。

示例

 public static void main(String[] args) {
        Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對象
        Matcher matcher = pattern.matcher("1234,banana,2234");

        // 第一次匹配
        while (matcher.find()) {
            System.out.println("第一次匹配的子序列:" + matcher.group());
            System.out.println("第一次起始子序列:" + matcher.start());
            System.out.println("第一次結(jié)束子序列:" + matcher.end());
            System.out.println();
        }

        // 重置 Matcher 對象
        matcher.reset("456,orange,789");

        // 第二次匹配
        while (matcher.find()) {
            System.out.println("第二次匹配的子序列:" + matcher.group());
            System.out.println("第二次起始子序列:" + matcher.start());
            System.out.println("第二次結(jié)束子序列:" + matcher.end());
            System.out.println();
        }
    	
    }	

result:

在這里插入圖片描述

analysis:

第一次匹配之后,我們調(diào)用了 reset() 方法并提供了一個新的輸入字符串,這樣 Matcher 對象的匹配狀態(tài)就被重置了,可以重新從新的輸入字符串中查找匹配的子序列,并輸出相應(yīng)的信息。

總結(jié)

Pattern 類是正則表達式的編譯表示形式。它通過 compile() 方法將正則表達式編譯為一個 Pattern 對象,然后可以使用這個對象來創(chuàng)建 Matcher 對象。Pattern 類提供了一系列靜態(tài)方法和實例方法,用于對正則表達式進行編譯、匹配和其他操作。
Matcher 類是用于對輸入字符串進行正則表達式匹配操作的對象。它通過 Pattern 對象的 matcher() 方法創(chuàng)建,并提供了一系列方法用于進行匹配、查找、替換等操作。Matcher 對象可以重復(fù)使用,也可以通過 reset() 方法重置其匹配狀態(tài)。

到此這篇關(guān)于Java正則表達式之Pattern和Matcher的使用的文章就介紹到這了,更多相關(guān)Java Pattern Matcher內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java中的序列化機制詳細解讀

    Java中的序列化機制詳細解讀

    這篇文章主要介紹了Java中的序列化機制詳細解讀,序列化:將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)臄?shù)據(jù)形式(比如二進制)的過程,反序列化:與序列化相對,把序列化轉(zhuǎn)換成的可以存儲或傳輸?shù)臄?shù)據(jù)形式轉(zhuǎn)化為對象的狀態(tài)信息的過程,需要的朋友可以參考下
    2023-11-11
  • 詳解OpenAPI開發(fā)如何動態(tài)的添加接口實現(xiàn)

    詳解OpenAPI開發(fā)如何動態(tài)的添加接口實現(xiàn)

    這篇文章主要為大家介紹了OpenAPI開發(fā)如何動態(tài)的添加接口實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Gauva使用ListenableFuture介紹說明

    Gauva使用ListenableFuture介紹說明

    并發(fā)是一個困難問題,但是通過強大和強大的抽象能夠顯著的簡化工作。為了簡化問題,Gauva使用ListenableFuture擴展了JDK的Future接口,這篇文章主要介紹了Gauva使用ListenableFuture
    2023-01-01
  • Java超詳細梳理異常處理機制

    Java超詳細梳理異常處理機制

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-04-04
  • SpringBoot測試junit遇到的坑及解決

    SpringBoot測試junit遇到的坑及解決

    這篇文章主要介紹了SpringBoot測試junit遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 基于OpenCV與JVM實現(xiàn)矩陣處理圖像

    基于OpenCV與JVM實現(xiàn)矩陣處理圖像

    本文主要介紹了Java圖像處理實戰(zhàn)之基于OpenCV與JVM實現(xiàn)矩陣處理圖像。文中的示例代碼講解詳細,對我們學(xué)習(xí)圖像處理有一定的幫助,感興趣的可以試一試
    2022-01-01
  • POI導(dǎo)出之Excel實現(xiàn)單元格的背景色填充問題

    POI導(dǎo)出之Excel實現(xiàn)單元格的背景色填充問題

    這篇文章主要介紹了POI導(dǎo)出之Excel實現(xiàn)單元格的背景色填充問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • IDEA怎么生成UML類圖的實現(xiàn)

    IDEA怎么生成UML類圖的實現(xiàn)

    這篇文章主要介紹了IDEA怎么生成UML類圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springboot如何配置Filter過濾器

    springboot如何配置Filter過濾器

    這篇文章主要介紹了springboot如何配置Filter過濾器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java生成唯一訂單號的幾種方式

    Java生成唯一訂單號的幾種方式

    這篇文章主要介紹了Java生成唯一訂單號的幾種方式,訂單號具有唯一標識符的作用,下邊將演示自增、隨機、組合的方式,生成高效、安全、唯一的訂單號,以滿足業(yè)務(wù)需求和避免潛在問題,需要的朋友可以參考下
    2025-03-03

最新評論