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

Java正則表達(dá)式之Pattern和Matcher的使用

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

前言

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

今天來看一下常用來處理正則表達(dá)式的兩個(gè)類:

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

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

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

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

一、Pattern和Matcher的簡(jiǎn)單使用

簡(jiǎn)單例子代碼:

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.";

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

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

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

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

result:

在這里插入圖片描述

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

二、Pattern詳解

2.1 Pattern 常用方法

2.1.1 compile(String regex)

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

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

2.1.2 matches(String regex, CharSequence input)

matches(String regex, CharSequence input):
matches 方法是 Pattern 類的靜態(tài)方法,用于嘗試將給定的正則表達(dá)式與整個(gè)輸入字符串進(jìn)行匹配。
該方法接受一個(gè)字符串參數(shù) regex,表示要匹配的正則表達(dá)式,以及一個(gè) CharSequence 參數(shù) input,表示要匹配的輸入字符串。
如果整個(gè)輸入字符串與正則表達(dá)式匹配成功,則返回 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.";

        // 定義正則表達(dá)式
        String regex = "\\d+"; // 匹配一個(gè)或多個(gè)數(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á)式 “\d+”,它包含一個(gè)數(shù)字字符。
字符串 “20” 也符合正則表達(dá)式 “\d+”,它包含兩個(gè)數(shù)字字符。
字符串 " " 不符合正則表達(dá)式 “\d+”,它不包含任何數(shù)字字符。
字符串 "1 2 3 4 " 不符合正則表達(dá)式 “\d+”,它包含空格和數(shù)字字符,不是一個(gè)連續(xù)的數(shù)字字符串。
字符串 “abcd” 不符合正則表達(dá)式 “\d+”,它不包含任何數(shù)字字符。

2.1.3 split(CharSequence input)

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

示例

  public static void main(String[] args) {
    	
    	 System.out.println("-------,測(cè)試--------");
    	 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+測(cè)試--------");
    	 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測(cè)試--------");
    	 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"截取了單個(gè)的數(shù)字,所有相比于”\d+"有了很多換行符。

2.1.4 pattern()

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

示例

    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 對(duì)象的正則表達(dá)式字符串。

2.1.5 matcher(CharSequence input)

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

示例

    public static void main(String[] args) {

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

result:

在這里插入圖片描述

analysis:

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

三、Matcher詳解

3.1 Matcher 常用方法

3.1.1 matches()

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

示例

    public static void main(String[] args) {

    	Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對(duì)象
    	Matcher matcher = pattern.matcher("1234"); // 使用 Pattern 對(duì)象創(chuàng)建 Matcher 對(duì)象
    	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() 會(huì)嘗試對(duì)整個(gè)輸入字符串進(jìn)行匹配,如果整個(gè)輸入字符串匹配成功,則返回 true,否則返回 false。
當(dāng)輸入字符串為 “1234” 時(shí),由于整個(gè)字符串都是數(shù)字,匹配成功,因此輸出為 true。
當(dāng)輸入字符串為 “1234d” 時(shí),由于字符串中包含非數(shù)字字符 “d”,匹配失敗,因此輸出為 false。
當(dāng)輸入字符串為 “12.34” 時(shí),由于字符串中包含小數(shù)點(diǎn) “.”,匹配失敗,因此輸出為 false。

3.1.2 find()

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

find():
find 方法在輸入字符串中查找下一個(gè)匹配的子序列。
如果找到匹配的子序列,則返回 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 對(duì)象
    	
    	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:

非常簡(jiǎn)單
find 方法在輸入字符串中查找下一個(gè)匹配的子序列。
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 對(duì)象
    	
    	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:

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

3.1.6 reset(CharSequence input)

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

示例

 public static void main(String[] args) {
        Pattern pattern = Pattern.compile("\\d+"); // 使用 compile() 方法創(chuàng)建 Pattern 對(duì)象
        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 對(duì)象
        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() 方法并提供了一個(gè)新的輸入字符串,這樣 Matcher 對(duì)象的匹配狀態(tài)就被重置了,可以重新從新的輸入字符串中查找匹配的子序列,并輸出相應(yīng)的信息。

總結(jié)

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

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

相關(guān)文章

  • Java中的序列化機(jī)制詳細(xì)解讀

    Java中的序列化機(jī)制詳細(xì)解讀

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

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

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

    Gauva使用ListenableFuture介紹說明

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

    Java超詳細(xì)梳理異常處理機(jī)制

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

    SpringBoot測(cè)試junit遇到的坑及解決

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

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

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

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

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

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

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

    springboot如何配置Filter過濾器

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

    Java生成唯一訂單號(hào)的幾種方式

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

最新評(píng)論