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

java 正則表達(dá)式匹配Matcher類的使用

 更新時(shí)間:2025年01月31日 09:41:44   作者:學(xué)會(huì)了沒(méi)  
Matcher類在Java中用于正則表達(dá)式匹配,本文主要介紹了java 正則表達(dá)式匹配Matcher類的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Matcher 類 用法

在 Java 中,Matcher 類是用于匹配正則表達(dá)式的工具,而 group() 方法是 Matcher 類中的一個(gè)重要方法,用于提取匹配結(jié)果中的捕獲組(captured groups)。以下是對(duì) group() 方法的詳細(xì)解釋:

1. 正則表達(dá)式中的捕獲組

在正則表達(dá)式中,捕獲組是通過(guò)圓括號(hào) () 定義的。每個(gè) () 內(nèi)的子表達(dá)式都是一個(gè)捕獲組,匹配的內(nèi)容可以被單獨(dú)提取。

例如:

String regex = "(\\d{2})-(\\d{2})-(\\d{4})";

這個(gè)正則表達(dá)式匹配日期格式(如 12-31-2023),其中:

  • (\\d{2}) 是第一個(gè)捕獲組,匹配月份。

  • (\\d{2}) 是第二個(gè)捕獲組,匹配日期。

  • (\\d{4}) 是第三個(gè)捕獲組,匹配年份。

2. Matcher 類的作用

Matcher 類用于對(duì)輸入字符串進(jìn)行正則表達(dá)式匹配。它通過(guò) Pattern 類的 matcher() 方法創(chuàng)建。

示例:

Pattern pattern = Pattern.compile("(\\d{2})-(\\d{2})-(\\d{4})");
Matcher matcher = pattern.matcher("12-31-2023");

3. group() 方法的作用

group() 方法用于提取匹配結(jié)果中的捕獲組。它有幾種重載形式:

(1) group()

  • 返回整個(gè)匹配的字符串。

  • 如果沒(méi)有匹配成功,調(diào)用此方法會(huì)拋出 IllegalStateException。

示例:

if (matcher.find()) {
    System.out.println(matcher.group()); // 輸出 "12-31-2023"
}

(2) group(int group)

  • 返回指定捕獲組的匹配內(nèi)容。

  • 捕獲組的編號(hào)從 1 開(kāi)始,group(0) 等價(jià)于 group(),表示整個(gè)匹配的字符串。

  • 如果指定的捕獲組不存在,會(huì)拋出 IndexOutOfBoundsException。

示例:

if (matcher.find()) {
    System.out.println(matcher.group(1)); // 輸出 "12"(月份)
    System.out.println(matcher.group(2)); // 輸出 "31"(日期)
    System.out.println(matcher.group(3)); // 輸出 "2023"(年份)
}

(3) group(String name)(Java 7+)

  • 返回命名捕獲組的匹配內(nèi)容。

  • 命名捕獲組通過(guò) (?<name>...) 語(yǔ)法定義。

  • 如果指定的命名捕獲組不存在,會(huì)拋出 IllegalArgumentException。

示例:

Pattern pattern = Pattern.compile("(?<month>\\d{2})-(?<day>\\d{2})-(?<year>\\d{4})");
Matcher matcher = pattern.matcher("12-31-2023");

if (matcher.find()) {
    System.out.println(matcher.group("month")); // 輸出 "12"
    System.out.println(matcher.group("day"));   // 輸出 "31"
    System.out.println(matcher.group("year"));  // 輸出 "2023"
}

4. group() 方法的使用步驟

  • 編譯正則表達(dá)式

    Pattern pattern = Pattern.compile("(\\d{2})-(\\d{2})-(\\d{4})");
  • 創(chuàng)建 Matcher 對(duì)象

    Matcher matcher = pattern.matcher("12-31-2023");
  • 執(zhí)行匹配

    • 使用 find() 方法查找匹配項(xiàng)。

    • 或者使用 matches() 方法檢查整個(gè)字符串是否匹配。

  • 提取捕獲組

    • 使用 group() 方法提取匹配的內(nèi)容。

示例:

if (matcher.find()) {
    String month = matcher.group(1); // "12"
    String day = matcher.group(2);   // "31"
    String year = matcher.group(3);  // "2023"
    System.out.println("Month: " + month + ", Day: " + day + ", Year: " + year);
}

5. 注意事項(xiàng)

  • 匹配成功后才能調(diào)用 group()

    • 在調(diào)用 group() 之前,必須先調(diào)用 find() 或 matches() 方法,否則會(huì)拋出 IllegalStateException。

  • 捕獲組編號(hào)從 1 開(kāi)始

    • group(0) 表示整個(gè)匹配的字符串,group(1) 表示第一個(gè)捕獲組,依此類推。

  • 捕獲組不存在時(shí)拋出異常

    • 如果指定的捕獲組編號(hào)或名稱不存在,會(huì)拋出 IndexOutOfBoundsException 或 IllegalArgumentException。

  • 命名捕獲組需要 Java 7+

    • 命名捕獲組功能在 Java 7 及以上版本中支持。

6. 完整示例

以下是一個(gè)完整的示例,演示如何使用 group() 方法提取捕獲組:

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

public class RegexExample {
    public static void main(String[] args) {
        String input = "Date: 12-31-2023, Time: 23:59";
        String regex = "(\\d{2})-(\\d{2})-(\\d{4}).*?(\\d{2}):(\\d{2})";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        if (matcher.find()) {
            System.out.println("Month: " + matcher.group(1)); // "12"
            System.out.println("Day: " + matcher.group(2));   // "31"
            System.out.println("Year: " + matcher.group(3));  // "2023"
            System.out.println("Hour: " + matcher.group(4));  // "23"
            System.out.println("Minute: " + matcher.group(5));// "59"
        } else {
            System.out.println("No match found!");
        }
    }
}

總結(jié)

  • group() 方法是 Matcher 類的核心方法,用于提取正則表達(dá)式匹配的捕獲組。

  • 捕獲組通過(guò)圓括號(hào) () 定義,編號(hào)從 1 開(kāi)始。

  • 使用 group() 前必須調(diào)用 find() 或 matches() 方法。

  • 命名捕獲組(Java 7+)可以通過(guò)名稱提取匹配內(nèi)容。

find() 和 matches() 方法的區(qū)別

1. matches() 方法

  • 作用

    • 檢查整個(gè)輸入字符串是否完全匹配正則表達(dá)式。

    • 如果整個(gè)字符串與正則表達(dá)式匹配,返回 true;否則返回 false。

  • 匹配范圍

    • 必須從字符串的開(kāi)頭匹配到結(jié)尾。

  • 示例

    String regex = "a.b"; // 匹配 "a" + 任意字符 + "b"
    String input1 = "aab";
    String input2 = "aabb";
    
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher1 = pattern.matcher(input1);
    Matcher matcher2 = pattern.matcher(input2);
    
    System.out.println(matcher1.matches()); // true,因?yàn)?"aab" 完全匹配 "a.b"
    System.out.println(matcher2.matches()); // false,因?yàn)?"aabb" 不完全匹配 "a.b"
  • 適用場(chǎng)景

    • 當(dāng)需要檢查整個(gè)字符串是否符合某種格式時(shí)(例如驗(yàn)證郵箱、電話號(hào)碼等)。

2. find() 方法

  • 作用

    • 在輸入字符串中查找與正則表達(dá)式匹配的子串。

    • 如果找到匹配的子串,返回 true;否則返回 false

    • 可以多次調(diào)用,每次調(diào)用會(huì)查找下一個(gè)匹配的子串。

  • 匹配范圍

    • 不要求整個(gè)字符串匹配,只要字符串中包含與正則表達(dá)式匹配的子串即可。

  • 示例

    String regex = "a.b"; // 匹配 "a" + 任意字符 + "b"
    String input = "aab aabb";
    
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    
    while (matcher.find()) {
        System.out.println("Found: " + matcher.group()); // 輸出匹配的子串
    }

    輸出:

    復(fù)制

    Found: aab
    Found: aab
  • 適用場(chǎng)景

    • 當(dāng)需要從字符串中提取多個(gè)匹配的子串時(shí)(例如從日志中提取特定格式的數(shù)據(jù))。

3. find() 和 matches() 的區(qū)別

特性matches()find()
匹配范圍整個(gè)字符串必須完全匹配正則表達(dá)式。字符串中只要包含匹配的子串即可。
返回值true 或 false。true 或 false。
多次調(diào)用每次調(diào)用都檢查整個(gè)字符串。每次調(diào)用查找下一個(gè)匹配的子串。
適用場(chǎng)景驗(yàn)證字符串是否符合某種格式。提取字符串中符合某種模式的子串。

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

相關(guān)文章

  • Kotlin語(yǔ)言編程Regex正則表達(dá)式實(shí)例詳解

    Kotlin語(yǔ)言編程Regex正則表達(dá)式實(shí)例詳解

    這篇文章主要為大家介紹了Kotlin語(yǔ)言編程Regex正則表達(dá)式實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java多線程join()方法的作用和實(shí)現(xiàn)原理解析(應(yīng)用場(chǎng)景)

    java多線程join()方法的作用和實(shí)現(xiàn)原理解析(應(yīng)用場(chǎng)景)

    join方法主要是用于將當(dāng)前線程掛起,等待其他線程結(jié)束后在執(zhí)行當(dāng)前線程,本文通過(guò)應(yīng)用場(chǎng)景分析代碼示例講解java多線程join()方法的作用和實(shí)現(xiàn)原理,感興趣的朋友一起看看吧
    2021-07-07
  • SpringBoot增量/瘦身部署jar包的方式

    SpringBoot增量/瘦身部署jar包的方式

    SpringBoot 項(xiàng)目的部署一般采用全量jar 包方式部署相關(guān)項(xiàng)目,如果我們對(duì)相關(guān)的Contrller層進(jìn)行相關(guān)業(yè)務(wù)調(diào)整就需要重新編譯全量jar 包太麻煩了,所以本文給大家介紹了使用SpringBoot 的增量/瘦身部署方式,需要的朋友可以參考下
    2024-01-01
  • 借助Maven搭建Hadoop開(kāi)發(fā)環(huán)境的最詳細(xì)教程分享

    借助Maven搭建Hadoop開(kāi)發(fā)環(huán)境的最詳細(xì)教程分享

    在Maven插件的幫助下,VSCode寫(xiě)Java其實(shí)非常方便,所以本文就來(lái)和大家詳細(xì)講講如何借助maven用VScode搭建Hadoop開(kāi)發(fā)環(huán)境,需要的可以參考下
    2023-05-05
  • SpringBoot?多環(huán)境打包最佳實(shí)踐記錄

    SpringBoot?多環(huán)境打包最佳實(shí)踐記錄

    SpringBoot通過(guò)配置多環(huán)境文件和在打包時(shí)指定激活的環(huán)境,實(shí)現(xiàn)多環(huán)境打包與部署,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot操作spark處理hdfs文件的操作方法

    SpringBoot操作spark處理hdfs文件的操作方法

    本文介紹了如何使用Spring Boot操作Spark處理HDFS文件,包括導(dǎo)入依賴、配置Spark信息、編寫(xiě)Controller和Service處理地鐵數(shù)據(jù)、運(yùn)行項(xiàng)目以及觀察Spark和HDFS的狀態(tài),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • java生成縮略圖的方法示例

    java生成縮略圖的方法示例

    這篇文章主要介紹了java生成縮略圖的方法,結(jié)合具體實(shí)例形式分析了java生成縮略圖過(guò)程中所涉及的各種常見(jiàn)的圖形處理技巧,需要的朋友可以參考下
    2017-03-03
  • 四步五分鐘Spring4快速集成Swagger

    四步五分鐘Spring4快速集成Swagger

    這篇文章主要為大家詳細(xì)介紹了四步、五分鐘Spring4快速集成Swagger的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java編寫(xiě)實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    Java編寫(xiě)實(shí)現(xiàn)坦克大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了Java編寫(xiě)實(shí)現(xiàn)坦克大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • JAVA 添加、修改和刪除PDF書(shū)簽的示例代碼

    JAVA 添加、修改和刪除PDF書(shū)簽的示例代碼

    這篇文章主要介紹了JAVA 添加、修改和刪除PDF書(shū)簽的示例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論