成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文講透 Java Regex正則表達式!

開發
正則表達式是一種用于描述字符串模式的工具,它在文本處理、數據驗證、搜索和替換等方面有著廣泛的應用。這篇文章,我們將分析什么是正則表達式以及它是如何工作的?

正則表達式是一種用于描述字符串模式的工具,它在文本處理、數據驗證、搜索和替換等方面有著廣泛的應用。這篇文章,我們將分析什么是正則表達式以及它是如何工作的?

什么是正則表達式?

正則表達式(regular expression,常簡寫為 regex、regexp 或 RE),又稱規律表達式、正規表示式、正規表示法、規則運算式、常規表示法,是計算機科學概念,用簡單字串來描述、匹配文中全部符合指定格式的字串,現在很多文本編輯器都支援用正則表達式搜尋、取代符合指定格式的字串。

Java Regex是一種用于匹配字符串的模式,它可以用來驗證、查找、替換或拆分字符串。Java中的正則表達式由 java.util.regex包提供,主要由 3 個類和 1 個接口組成:

  • Pattern Class:表示正則表達式的編譯表示。
  • Matcher Class:用于執行匹配操作的引擎。
  • PatternSyntaxException Class:表示正則表達式語法錯誤的異常。
  • MatchResult Interface:用于表示匹配操作的結果。

正則表達式組成

Java 正則表達式主要由以下幾部分組成:

  • 字符類:用于匹配指定范圍內的任意字符。例如[a-z]表示匹配任意小寫字母。
  • 預定義字符類:簡化的字符類。例如\d表示匹配任意數字,\w表示匹配任意字母、數字或下劃線。
  • 量詞:用于指定字符或子表達式的重復次數。例如a*表示匹配零次或多次 a,a{2,4}表示匹配 2 到 4 次 a。
  • 邊界匹配符:用于匹配字符串的邊界。例如^表示匹配字符串的開始,$表示匹配字符串的結束。
  • 分組:用于將多個字符或子表達式組合在一起。例如(abc)表示匹配字符串 "abc"。

下面還列舉了一些常見的正則表達式元素:

  • .: 匹配除換行符以外的任意單字符
  • *: 匹配前面的子表達式零次或多次
  • +: 匹配前面的子表達式一次或多次
  • ?: 匹配前面的子表達式零次或一次
  • \d: 匹配一個數字字符,[0-9] 的縮寫
  • \D 匹配任何非數字,[^0-9] 的縮寫
  • \s 任何空格字符,[\t\n\x0B\f\r] 的縮寫
  • \S 任何非空格字符,是 [^\s] 的縮寫
  • \w: 匹配一個字母、數字或下劃線字符
  • [abc]: 匹配方括號內的任意一個字符
  • ^: 匹配字符串的開始
  • $: 匹配字符串的結束

更多表達式,參考: regexr

Regex 類詳解

1.Matcher

Matcher類實現 MatchResult 接口,它是一個正則表達式引擎,用于對字符序列執行匹配操作。主要包含以下方法:

  • boolean matches():測試正則表達式是否與模式匹配。
  • boolean find():找到與模式匹配的下一個表達式。
  • boolean find(int start):找到與給定起始編號中的模式匹配的下一個表達式。
  • String group():返回匹配的子序列。
  • int start():返回匹配子序列的起始索引。
  • int end():返回匹配子序列的結束索引。
  • int groupCount():返回匹配子序列的總數。

2.Pattern

Pattern類是正則表達式的編譯版本,用于定義正則表達式引擎的模式。主要包含以下方法:

  • static Pattern compile(String regex):編譯給定的正則表達式并返回 Pattern 的實例。
  • Matcher matcher(CharSequence input):創建一個匹配器,該匹配器將給定的輸入與模式匹配。
  • static boolean matches(String regex, CharSequence input):它作為編譯和匹配器方法的組合工作。它編譯正則表達式并將給定的輸入與模式匹配。
  • String[] split(CharSequence input):圍繞給定模式的匹配項拆分給定的輸入字符串。
  • String pattern():返回正則表達式模式。

3.PatternSyntaxException

PatternSyntaxException 類是拋出未經檢查的異常,指示正則表達式模式中的語法錯誤。主要包含以下方法:

  • int getIndex():檢索異常的索引
  • String getDescription():檢索異常的描述信息
  • String getPattern():檢索錯誤的正則表達式模式

4.MatchResult

MatchResult接口主要用于匹配操作的結果。此接口包含用于確定與正則表達式匹配的結果的查詢方法。匹配邊界、組和組邊界可以通過。主要包含以下方法:

  • int start():返回匹配的開始索引
  • int start(int group):返回本次匹配期間給定組捕獲的子序列的起始索引。
  • int end():返回最后一個匹配字符后的偏移量。
  • int end(int group):返回本次匹配期間給定組捕獲的子序列的最后一個字符后的偏移量。
  • String group():返回與上一個匹配項匹配的輸入子序列。
  • String group(int group):返回上一次匹配操作期間給定組捕獲的輸入子序列。
  • int groupCount():返回此匹配結果模式中的捕獲組的數量。

正則使用場景

正則使用場景主要包含以下類型:

  • 輸入驗證,比如郵箱驗證,手機號驗證,URL 驗證,密碼強度驗證
  • 文本搜索和替換,比如查找特定模式,替換特定模式
  • 文本拆分,比如按照空白字符拆分字符串
  • 日志和數據解析,比如提取IP地址,提取日期和時間
  • 數據清洗,比如刪除HTML標簽,格式化字符串
  • 編譯器和解釋器,比如識別標識符、關鍵字、操作符等
  • 數據庫查詢,比如使用 SQL 的 REGEXP 運算符進行復雜的模式匹配查詢。
  • 文件名匹配,比如查找所有以 .txt 結尾的文件

除了上面的場景,正則表達式還可以使用到其他的場景,需要根據具體的場景而定。

示例演示

1.郵箱驗證

驗證郵箱地址是一個常見的正則表達式應用場景。首先,我們需要一個能夠驗證郵箱地址的正則表達式。一個常見的用于驗證郵箱的正則表達式如下:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

該正則表達式的解釋如下:

  • ^:匹配字符串的開始。
  • [a-zA-Z0-9._%+-]+:匹配一個或多個字母、數字、點、下劃線、百分號、加號或減號。
  • @:匹配@符號。
  • [a-zA-Z0-9.-]+:匹配一個或多個字母、數字、點或減號。
  • \.:匹配一個點。
  • [a-zA-Z]{2,}:匹配兩個或更多的字母。
  • $:匹配字符串的結束。

下面是一個完整的 Java示例代碼:

import java.util.regex.*;
public class EmailValidator {
    public static void main(String[] args) {
        String emailPattern = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
        String[] emails = {
            "valid.email@example.com",
            "invalid-email@example",
            "another.valid.email@example.co.uk",
            "invalid.email@.com",
            "valid_email123@example.org"
        };
        
        Pattern pattern = Pattern.compile(emailPattern);
        for (String email : emails) {
            Matcher matcher = pattern.matcher(email);
            boolean isMatch = matcher.matches();
            System.out.println("Email: " + email + " is valid? " + isMatch);
        }
    }
}

運行結果:

Email: valid.email@example.com is valid? true
Email: invalid-email@example is valid? false
Email: another.valid.email@example.co.uk is valid? true
Email: invalid.email@.com is valid? false
Email: valid_email123@example.org is valid? true

在上述代碼中:

  • Pattern.compile(emailPattern):編譯正則表達式。
  • pattern.matcher(email):創建一個匹配器對象,用于匹配給定的郵箱字符串。
  • matcher.matches():檢查整個字符串是否與正則表達式匹配。

2.拆分字符串

在下面的示例中,正則表達式\s+表示一個或多個空白字符。split方法用于將字符串按匹配的模式拆分為多個部分。

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String pattern = "\\s+";
        String text = "Split this string by spaces.";
        
        Pattern compiledPattern = Pattern.compile(pattern);
        String[] parts = compiledPattern.split(text);
        
        for (String part : parts) {
            System.out.println(part);
        }
    }
}

3.查找子字符串

在下面示例中,正則表達式\d+表示一個或多個數字字符。find方法用于查找所有匹配的子字符串。

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String pattern = "\\d+";
        String text = "There are 123 apples and 456 oranges.";
        
        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);
        
        while (matcher.find()) {
            System.out.println("Found a number: " + matcher.group());
        }
    }
}

總結

正則表達式是一種功能強大且靈活的工具,能夠極大地提高字符串處理的效率和精度。正則表達式的技術難度不大,但是很難記憶,而且在輸入驗證、文本搜索和替換、文本拆分、日志和數據解析、數據清洗、編譯器和解釋器等應用場景使用比較多。所以,掌握正則表達式還是有很大幫助。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2023-06-01 12:48:52

Java正則表達式

2020-09-18 06:42:14

正則表達式程序

2009-08-20 14:43:03

C#正則表達式Rege

2016-11-10 16:21:22

Java 正則表達式

2009-02-18 09:48:20

正則表達式Java教程

2020-09-04 09:16:04

Python正則表達式虛擬機

2018-09-27 15:25:08

正則表達式前端

2023-10-07 08:25:09

Java處理工具正則表達式

2009-06-08 16:49:05

Java正則表達式group

2009-09-16 17:15:57

正則表達式引擎

2022-01-04 11:35:03

Linux Shel正則表達式Linux

2023-09-13 08:12:45

2024-09-14 09:18:14

Python正則表達式

2010-03-03 10:51:32

正則表達式

2010-10-19 17:21:16

2011-07-11 12:33:30

JAVA

2025-01-13 12:00:00

反射Java開發

2023-02-14 08:18:43

2022-03-28 06:19:14

正則表達式開發

2019-07-17 15:45:47

正則表達式字符串前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区在线电影 | 久久精品影视 | 国产毛片久久久 | 蜜桃日韩| 福利精品 | 久久伊人一区 | 看片91| 97国产在线观看 | 欧美高清视频一区 | 久久久久久亚洲精品 | 国产成人久久精品一区二区三区 | 亚洲久久 | www狠狠干 | 欧美在线一区二区三区 | 国产精品精品视频一区二区三区 | 午夜一区二区三区在线观看 | 成人三级视频 | 亚洲一av| 国产精品久久久久久久久久久免费看 | 欧美一区二区在线播放 | 国产精品一区在线观看你懂的 | 国产欧美一区二区久久性色99 | 成人精品视频在线观看 | 国产日韩精品一区二区 | 国产婷婷 | 天天草天天干天天 | 亚洲综合色视频在线观看 | 天天天操操操 | 天天天天操 | 国产日韩欧美一区二区 | 亚洲欧美日韩精品久久亚洲区 | 伊人超碰在线 | 国产成人99久久亚洲综合精品 | 久久精品久久久久久 | 亚洲国产成人久久综合一区,久久久国产99 | va在线| 欧美在线| 中文字幕精品视频 | 干干干操操操 | 日韩高清国产一区在线 | 成人国产精品一级毛片视频毛片 |