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

Java中使用正則表達(dá)式的詳細(xì)教程

 更新時(shí)間:2025年09月02日 08:59:07   作者:三水  
本文介紹Java正則表達(dá)式基礎(chǔ)語(yǔ)法及使用方法,涵蓋Pattern/Matcher類、字符匹配、量詞、分組、預(yù)定義類、轉(zhuǎn)義規(guī)則及性能優(yōu)化建議,提供郵箱、手機(jī)號(hào)、身份證、URL等常見驗(yàn)證示例,感興趣的朋友跟隨小編一起看看吧

正則表達(dá)式基礎(chǔ)語(yǔ)法

Java正則表達(dá)式基于java.util.regex包,核心類是Pattern和Matcher。基本語(yǔ)法遵循標(biāo)準(zhǔn)正則規(guī)范:

  • . 匹配任意單個(gè)字符(除換行符)
  • \d 匹配數(shù)字,等價(jià)于 [0-9]
  • \w 匹配單詞字符,等價(jià)于 [a-zA-Z0-9_]
  • \s 匹配空白字符(空格、制表符等)
  • [] 字符集合,如 [abc] 匹配a、b或c
  • ^ 在字符集中表示否定,如 [^abc] 匹配非a/b/c的字符
  • * 匹配前一個(gè)元素0次或多次
  • + 匹配前一個(gè)元素1次或多次
  • ? 匹配前一個(gè)元素0次或1次
  • {n} 精確匹配n次
  • {n,} 匹配至少n次
  • {n,m} 匹配n到m次
  • | 寫在方括號(hào)外面,表示或
  • && 交集,表示與
  • (?!) 忽略后面字符的大小寫

常用預(yù)定義字符類

\\d    數(shù)字 [0-9]
\\D    非數(shù)字 [^0-9]
\\s    空白字符 [ \\t\\n\\x0B\\f\\r]
\\S    非空白字符 [^\\s]
\\w    單詞字符 [a-zA-Z_0-9]
\\W    非單詞字符 [^\\w]

邊界匹配符

^ 匹配行首
$ 匹配行尾
\b 匹配單詞邊界
\B 匹配非單詞邊界

Java中的特殊處理

在Java字符串中需要使用雙反斜杠轉(zhuǎn)義:

// 匹配數(shù)字的正則表達(dá)式
String regex = "\\d+"; // 實(shí)際表示 \d+

Pattern和Matcher使用示例

import java.util.regex.*;
String text = "Hello 123 World";
// Pattern:表示正則表達(dá)式
Pattern pattern = Pattern.compile("\\d+");
// Matcher:文本匹配器,從頭開始讀取,直到讀取到匹配的字符串
Matcher matcher = pattern.matcher(text);
// 查找匹配
while (matcher.find()) {
    System.out.println("Found: " + matcher.group());
}
// 匹配整個(gè)字符串
boolean isMatch = Pattern.matches("Hello.*", text);
  • 貪婪爬取:用+,*,表示盡可能多的獲取數(shù)據(jù)
  • 非貪婪爬?。涸?,*后面加上?,表示盡可能少的獲取數(shù)據(jù)
        String str = "aaaaaaaaaabbbbbbbbaaaaaaaaa";
        System.out.println("--------- 貪婪匹配 ---------");
        // 貪婪匹配
        Pattern p = Pattern.compile("ab+");
        Matcher m = p.matcher(str);
        while (m.find()) {
            System.out.println(m.group());
        }
        System.out.println("--------- 懶惰匹配 ---------");
        // 懶惰匹配
        Pattern p1 = Pattern.compile("ab+?");
        Matcher m1 = p1.matcher(str);
        while (m1.find()) {
            System.out.println(m1.group());
        }

效果圖:

分組和捕獲

使用()創(chuàng)建捕獲組:

String str = "a123a";
        String str1 = "abc123abc";
        String str2 = "1117891111";
        String str3 = "aa7879a";
        // 捕獲分組
        System.out.println("--------- 捕獲分組 ---------");
        String regex = "(.).+\\1";
        String regex1 = "(.+).+\\1";
        String regex2 = "((.)\\2).+\\1";
        System.out.println(str.matches(regex));
        System.out.println(str1.matches(regex1));
        System.out.println(str2.matches(regex2));
        System.out.println(str3.matches(regex2));
        // 非捕獲分組
        System.out.println("--------- 非捕獲分組 ---------");
        String str4 = "我要學(xué)學(xué)變變變變撐撐撐撐撐";
        str4 = str4.replaceAll("(.)\\1+", "$1");// replaceAll() 方法用于把所有滿足匹配的字符串替換成指定的字符串
        System.out.println(str4);

效果圖:

  • 從1開始,連續(xù)不斷
  • 以左括號(hào)為基準(zhǔn)
  • 捕獲分組(默認(rèn)):① 內(nèi)部:\組號(hào) ② 外部:$組號(hào)(組號(hào)會(huì)保留下來(lái))
  • 非捕獲分組:使用條件,不占組號(hào)
    • "?=":表示任一數(shù)據(jù)
    • "?:":表示所有數(shù)據(jù)
    • "?!":表示不包含這些數(shù)據(jù)

常用正則表達(dá)式示例

  • 郵箱驗(yàn)證:
    String emailRegex = "^[\\w-_.+]*[\\w-_.]@([\\w]+\\.)+[\\w]+[\\w]$";
  • 手機(jī)號(hào)驗(yàn)證(中國(guó)大陸):
    String phoneRegex = "^1[3-9]\\d{9}$";
  • 身份證號(hào)驗(yàn)證(簡(jiǎn)易版):
    String idCardRegex = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$";
  • URL驗(yàn)證:
    String urlRegex = "^(https?://)?([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$";

特殊匹配模式

通過(guò)Pattern的常量設(shè)置匹配模式:

// 不區(qū)分大小寫匹配
Pattern.CASE_INSENSITIVE 
// 多行模式(^和$匹配每行的開頭和結(jié)尾)
Pattern.MULTILINE
// 示例:不區(qū)分大小寫匹配
Pattern.compile("hello", Pattern.CASE_INSENSITIVE).matcher("Hello").find(); // true

字符串替換

使用正則表達(dá)式進(jìn)行字符串替換:

String text = "a1b2c3";
String replaced = text.replaceAll("\\d", "-"); // a-b-c-

性能優(yōu)化建議

預(yù)編譯常用正則表達(dá)式:

private static final Pattern EMAIL_PATTERN = Pattern.compile(emailRegex);
  1. 避免過(guò)度使用.通配符,盡可能明確匹配范圍
  2. 對(duì)于簡(jiǎn)單固定字符串匹配,優(yōu)先使用String.contains()或String.startsWith()等原生方法
  3. 謹(jǐn)慎使用回溯量大的表達(dá)式(如嵌套的量詞)

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

相關(guān)文章

  • kill命令在Java應(yīng)用中使用的注意事項(xiàng)小結(jié)

    kill命令在Java應(yīng)用中使用的注意事項(xiàng)小結(jié)

    這篇文章主要給大家介紹了關(guān)于kill命令在Java應(yīng)用中使用的注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • JAVA線程池專題(概念和作用)

    JAVA線程池專題(概念和作用)

    這篇文章主要介紹了Java線程池的概念和作用,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 基于TCP通信丟包原因總結(jié)(推薦)

    基于TCP通信丟包原因總結(jié)(推薦)

    下面小編就為大家?guī)?lái)一篇基于TCP通信丟包原因總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • java8時(shí)間間隔類Duration和Period示例代碼

    java8時(shí)間間隔類Duration和Period示例代碼

    文章解釋了Java中Duration和Period的區(qū)別,并提供了它們的特點(diǎn)、適用場(chǎng)景和常見用途,文中還提供了每個(gè)類的常用方法和示例,感興趣的朋友一起看看吧
    2026-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)--時(shí)間和空間復(fù)雜度

    Java數(shù)據(jù)結(jié)構(gòu)--時(shí)間和空間復(fù)雜度

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)的時(shí)間和空間復(fù)雜度,小編覺得這篇文寫的不錯(cuò),感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • java中文傳值亂碼問(wèn)題的解決方法

    java中文傳值亂碼問(wèn)題的解決方法

    這篇文章主要為大家詳細(xì)介紹了java中文傳值亂碼問(wèn)題的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java8新特性之Optional使用詳解

    Java8新特性之Optional使用詳解

    這篇文章主要介紹了Java8新特性之Optional使用詳解,為了解決空指針異常更加優(yōu)雅,Java8?提供了?Optional?類庫(kù),Optional?實(shí)際上是個(gè)容器,它可以保存類型T的值,或者僅僅保存null,,需要的朋友可以參考下
    2023-08-08
  • java實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算功能

    java實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單日期計(jì)算功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java自動(dòng)化獲取Excel工作表名稱的示例代碼

    Java自動(dòng)化獲取Excel工作表名稱的示例代碼

    Spire.XLS for Java,作為一個(gè)專業(yè)的 Java Excel 庫(kù),能輕松完成從轉(zhuǎn)換 Excel 工作表到編輯,復(fù)制等一系列難易程度不同的任務(wù),下面我們來(lái)看看如何使用它實(shí)現(xiàn)自動(dòng)化快速獲取所有工作表名稱吧
    2025-10-10
  • Java的Synchronized關(guān)鍵字學(xué)習(xí)指南(全面 & 詳細(xì))

    Java的Synchronized關(guān)鍵字學(xué)習(xí)指南(全面 & 詳細(xì))

    這篇文章主要給大家介紹了關(guān)于Java的Synchronized關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

会东县| 镇平县| 大埔区| 大渡口区| 达州市| 松原市| 田阳县| 工布江达县| 米泉市| 泽州县| 福清市| 浮梁县| 即墨市| 福清市| 井陉县| 沿河| 新晃| 塔城市| 丰宁| 卢龙县| 当雄县| 两当县| 泰和县| 如皋市| 五峰| 昭通市| 楚雄市| 阳新县| 徐州市| 栾城县| 永登县| 海口市| 吉水县| 河池市| 元氏县| 卢湾区| 北碚区| 疏勒县| 洛宁县| 临汾市| 土默特右旗|