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

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

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

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

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

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

常用預(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());
}
// 匹配整個字符串
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ù)不斷
  • 以左括號為基準(zhǔn)
  • 捕獲分組(默認(rèn)):① 內(nèi)部:\組號 ② 外部:$組號(組號會保留下來)
  • 非捕獲分組:使用條件,不占組號
    • "?=":表示任一數(shù)據(jù)
    • "?:":表示所有數(shù)據(jù)
    • "?!":表示不包含這些數(shù)據(jù)

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

  • 郵箱驗(yàn)證:
    String emailRegex = "^[\\w-_.+]*[\\w-_.]@([\\w]+\\.)+[\\w]+[\\w]$";
  • 手機(jī)號驗(yàn)證(中國大陸):
    String phoneRegex = "^1[3-9]\\d{9}$";
  • 身份證號驗(yà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-./?%&=]*)?$";

特殊匹配模式

通過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. 避免過度使用.通配符,盡可能明確匹配范圍
  2. 對于簡單固定字符串匹配,優(yōu)先使用String.contains()或String.startsWith()等原生方法
  3. 謹(jǐn)慎使用回溯量大的表達(dá)式(如嵌套的量詞)

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

相關(guān)文章

  • Java中使用注解的實(shí)例詳解

    Java中使用注解的實(shí)例詳解

    注解(Annotation)是放在Java源碼的類、方法、字段、參數(shù)前的一種特殊“注釋”,這篇文章主要介紹了Java中如何使用注解,需要的朋友可以參考下
    2023-06-06
  • Java微信公眾平臺開發(fā)(10) 微信自定義菜單的創(chuàng)建實(shí)現(xiàn)

    Java微信公眾平臺開發(fā)(10) 微信自定義菜單的創(chuàng)建實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第十步,微信自定義菜單的創(chuàng)建實(shí)現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringBoot中加密模塊的使用

    SpringBoot中加密模塊的使用

    本文主要介紹了SpringBoot中加密模塊的使用,包括對稱加密、非對稱加密和哈希加密等,同時還會提供相應(yīng)的代碼示例,感興趣的朋友可以參考一下
    2023-05-05
  • Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐

    Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐

    最近的一個項(xiàng)目中涉及到了支付業(yè)務(wù),其中用到了微信支付和支付寶支付,本文就來介紹一下Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • SpringBoot?2.x?接入非標(biāo)準(zhǔn)SSE格式大模型流式響應(yīng)的實(shí)戰(zhàn)解決方案

    SpringBoot?2.x?接入非標(biāo)準(zhǔn)SSE格式大模型流式響應(yīng)的實(shí)戰(zhàn)解決方案

    本文介紹了在SpringBoot2.7.3環(huán)境中接入非標(biāo)準(zhǔn)SSE格式大模型流式響應(yīng)的實(shí)戰(zhàn)解決方案,通過自定義實(shí)現(xiàn),解決了大模型返回?cái)?shù)據(jù)格式不符合標(biāo)準(zhǔn)SSE規(guī)范的問題,關(guān)鍵步驟包括引入Gradle依賴、配置WebClient、處理粘包、格式兼容和雙重過濾機(jī)制,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Java線程操作的常見方法【線程名稱獲取、設(shè)置、線程啟動判斷等】

    Java線程操作的常見方法【線程名稱獲取、設(shè)置、線程啟動判斷等】

    這篇文章主要介紹了Java線程操作的常見方法,結(jié)合實(shí)例形式總結(jié)分析了java線程的創(chuàng)建、線程名稱的獲取、設(shè)置以及線程啟動的判斷等相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • Spring中的Aware接口及應(yīng)用場景詳解

    Spring中的Aware接口及應(yīng)用場景詳解

    這篇文章主要介紹了Spring中的Aware接口及應(yīng)用場景,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法示例

    基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法示例

    這篇文章主要介紹了基于Java實(shí)現(xiàn)的一層簡單人工神經(jīng)網(wǎng)絡(luò)算法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)人工神經(jīng)網(wǎng)絡(luò)的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • 詳解Java運(yùn)算中的取余

    詳解Java運(yùn)算中的取余

    這篇文章主要介紹了java運(yùn)算中的取余,在java運(yùn)算中,取余符號是?%,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 一文詳解MVCC的執(zhí)行原理

    一文詳解MVCC的執(zhí)行原理

    MVCC是一種并發(fā)控制機(jī)制,用于解決數(shù)據(jù)庫并發(fā)訪問中,數(shù)據(jù)一致性問題,它通過在讀寫操作期間保存多個數(shù)據(jù)版本,以提供并發(fā)事務(wù)間的隔離性,本文將和大家簡單聊聊MVCC的執(zhí)行原理,需要的朋友可以參考下
    2023-12-12

最新評論