最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

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

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

一、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+"; // 匹配一個或多個數字

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

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

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

result:

在這里插入圖片描述

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

二、Pattern詳解

2.1 Pattern 常用方法

2.1.1 compile(String regex)

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

示例: 上面已經有了,不重復了。

2.1.2 matches(String regex, CharSequence input)

matches(String regex, CharSequence input):
matches 方法是 Pattern 類的靜態(tài)方法,用于嘗試將給定的正則表達式與整個輸入字符串進行匹配。
該方法接受一個字符串參數 regex,表示要匹配的正則表達式,以及一個 CharSequence 參數 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+"; // 匹配一個或多個數字
    
        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+”,它包含一個數字字符。
字符串 “20” 也符合正則表達式 “\d+”,它包含兩個數字字符。
字符串 " " 不符合正則表達式 “\d+”,它不包含任何數字字符。
字符串 "1 2 3 4 " 不符合正則表達式 “\d+”,它包含空格和數字字符,不是一個連續(xù)的數字字符串。
字符串 “abcd” 不符合正則表達式 “\d+”,它不包含任何數字字符。

2.1.3 split(CharSequence input)

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

示例

  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:

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

2.1.4 pattern()

pattern():
pattern 方法用于返回當前 Pattern 對象所表示的正則表達式的字符串形式。
該方法不接受任何參數,直接返回當前 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:

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

2.1.5 matcher(CharSequence input)

matcher(CharSequence input):
matcher 方法用于創(chuàng)建一個 Matcher 對象,用于對指定的輸入字符串進行匹配操作。
該方法接受一個 CharSequence 參數 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ū)域和最后的匹配結果。

三、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。
當輸入字符串為 “1234” 時,由于整個字符串都是數字,匹配成功,因此輸出為 true。
當輸入字符串為 “1234d” 時,由于字符串中包含非數字字符 “d”,匹配失敗,因此輸出為 false。
當輸入字符串為 “12.34” 時,由于字符串中包含小數點 “.”,匹配失敗,因此輸出為 false。

3.1.2 find()

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

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

3.1.3 group()

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

示例

    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 方法返回當前匹配的子序列。

3.1.4 start()

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

3.1.5 end()

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

示例

    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("結束子序列:" + matcher.end());
        	System.out.println();
    	}	 	
    }	

result:

在這里插入圖片描述

analysis:

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

3.1.6 reset(CharSequence input)

reset(CharSequence input):
reset 方法將 Matcher 對象的狀態(tài)重置,使其可以重新在輸入字符串中進行匹配。
在重復使用 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("第一次結束子序列:" + 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("第二次結束子序列:" + matcher.end());
            System.out.println();
        }
    	
    }	

result:

在這里插入圖片描述

analysis:

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

總結

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

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

相關文章

  • Spring依賴注入方式(Dependency Injection)

    Spring依賴注入方式(Dependency Injection)

    在實際開發(fā)中,推薦使用構造器注入而非字段注入,原因包括官方推薦、代碼簡潔、安全性高和易于測試,構造器注入通過在對象創(chuàng)建時注入所有必需的依賴,避免運行時忘記注入的問題,且利用Lombok的@RequiredArgsConstructor可自動生成構造函數
    2024-10-10
  • Java8中Optional類型和Kotlin中可空類型的使用對比

    Java8中Optional類型和Kotlin中可空類型的使用對比

    這篇文章主要給大家介紹了關于Java8中Optional類型和Kotlin中可空類型的使用對比,文中通過示例代碼給大家介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • Java中ArrayList去除重復元素(包括字符串和自定義對象)

    Java中ArrayList去除重復元素(包括字符串和自定義對象)

    本文主要介紹了Java中ArrayList去除重復元素(包括字符串和自定義對象)的方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 詳解Spark?Sql在UDF中如何引用外部數據

    詳解Spark?Sql在UDF中如何引用外部數據

    這篇文章主要為大家介紹了詳解Spark?Sql在UDF中如何引用外部數據示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java編寫猜數字小游戲

    Java編寫猜數字小游戲

    這篇文章主要為大家詳細介紹了Java編寫的猜數字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-09-09
  • SpringBoot使用slf4j日志并輸出到文件中的操作方法

    SpringBoot使用slf4j日志并輸出到文件中的操作方法

    這篇文章主要介紹了SpringBoot使用slf4j日志并輸出到文件中,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java多線程、線程安全、線程池創(chuàng)建方式

    Java多線程、線程安全、線程池創(chuàng)建方式

    本文詳細介紹了多線程的基本概念、創(chuàng)建方式、常用方法、線程安全問題解決以及線程池的使用,通過具體案例和代碼示例,幫助讀者理解多線程在Java中的應用和實現,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 在idea中如何使用Typora編輯markdown文件

    在idea中如何使用Typora編輯markdown文件

    這篇文章主要介紹了在idea中如何使用Typora編輯markdown文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java判斷時間段內文件是否更新的方法

    Java判斷時間段內文件是否更新的方法

    這篇文章主要介紹了Java判斷時間段內文件是否更新的方法,通過實例形式講述了定時器、類加載器及線程等方法實現判斷文件更新的功能,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 如何使用java制作假數據接口

    如何使用java制作假數據接口

    這篇文章主要介紹了如何使用java制作假數據接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

南涧| 洛南县| 玛沁县| 辽源市| 大连市| 聊城市| 彭水| 长沙县| 武汉市| 吉安县| 区。| 涪陵区| 资中县| 井陉县| 博野县| 城口县| 定安县| 乐业县| 京山县| 长岭县| 新郑市| 于都县| 广灵县| 兴文县| 玉山县| 丰县| 扬州市| 桓仁| 楚雄市| 彭州市| 萍乡市| 沧州市| 工布江达县| 九江市| 彭山县| 翁牛特旗| 济宁市| 如皋市| 竹北市| 任丘市| 孟州市|