自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文講透 Java Regex正則表達(dá)式!

開(kāi)發(fā)
正則表達(dá)式是一種用于描述字符串模式的工具,它在文本處理、數(shù)據(jù)驗(yàn)證、搜索和替換等方面有著廣泛的應(yīng)用。這篇文章,我們將分析什么是正則表達(dá)式以及它是如何工作的?

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

什么是正則表達(dá)式?

正則表達(dá)式(regular expression,常簡(jiǎn)寫(xiě)為 regex、regexp 或 RE),又稱規(guī)律表達(dá)式、正規(guī)表示式、正規(guī)表示法、規(guī)則運(yùn)算式、常規(guī)表示法,是計(jì)算機(jī)科學(xué)概念,用簡(jiǎn)單字串來(lái)描述、匹配文中全部符合指定格式的字串,現(xiàn)在很多文本編輯器都支援用正則表達(dá)式搜尋、取代符合指定格式的字串。

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

  • Pattern Class:表示正則表達(dá)式的編譯表示。
  • Matcher Class:用于執(zhí)行匹配操作的引擎。
  • PatternSyntaxException Class:表示正則表達(dá)式語(yǔ)法錯(cuò)誤的異常。
  • MatchResult Interface:用于表示匹配操作的結(jié)果。

正則表達(dá)式組成

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

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

下面還列舉了一些常見(jiàn)的正則表達(dá)式元素:

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

更多表達(dá)式,參考: regexr

Regex 類詳解

1.Matcher

Matcher類實(shí)現(xiàn) MatchResult 接口,它是一個(gè)正則表達(dá)式引擎,用于對(duì)字符序列執(zhí)行匹配操作。主要包含以下方法:

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

2.Pattern

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

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

3.PatternSyntaxException

PatternSyntaxException 類是拋出未經(jīng)檢查的異常,指示正則表達(dá)式模式中的語(yǔ)法錯(cuò)誤。主要包含以下方法:

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

4.MatchResult

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

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

正則使用場(chǎng)景

正則使用場(chǎng)景主要包含以下類型:

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

除了上面的場(chǎng)景,正則表達(dá)式還可以使用到其他的場(chǎng)景,需要根據(jù)具體的場(chǎng)景而定。

示例演示

1.郵箱驗(yàn)證

驗(yàn)證郵箱地址是一個(gè)常見(jiàn)的正則表達(dá)式應(yīng)用場(chǎng)景。首先,我們需要一個(gè)能夠驗(yàn)證郵箱地址的正則表達(dá)式。一個(gè)常見(jiàn)的用于驗(yàn)證郵箱的正則表達(dá)式如下:

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

該正則表達(dá)式的解釋如下:

  • ^:匹配字符串的開(kāi)始。
  • [a-zA-Z0-9._%+-]+:匹配一個(gè)或多個(gè)字母、數(shù)字、點(diǎn)、下劃線、百分號(hào)、加號(hào)或減號(hào)。
  • @:匹配@符號(hào)。
  • [a-zA-Z0-9.-]+:匹配一個(gè)或多個(gè)字母、數(shù)字、點(diǎn)或減號(hào)。
  • \.:匹配一個(gè)點(diǎn)。
  • [a-zA-Z]{2,}:匹配兩個(gè)或更多的字母。
  • $:匹配字符串的結(jié)束。

下面是一個(gè)完整的 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);
        }
    }
}

運(yùn)行結(jié)果:

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):編譯正則表達(dá)式。
  • pattern.matcher(email):創(chuàng)建一個(gè)匹配器對(duì)象,用于匹配給定的郵箱字符串。
  • matcher.matches():檢查整個(gè)字符串是否與正則表達(dá)式匹配。

2.拆分字符串

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

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á)式\d+表示一個(gè)或多個(gè)數(shù)字字符。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());
        }
    }
}

總結(jié)

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

責(zé)任編輯:趙寧寧 來(lái)源: 猿java
相關(guān)推薦

2023-06-01 12:48:52

Java正則表達(dá)式

2020-09-18 06:42:14

正則表達(dá)式程序

2009-08-20 14:43:03

C#正則表達(dá)式Rege

2016-11-10 16:21:22

Java 正則表達(dá)式

2009-02-18 09:48:20

正則表達(dá)式Java教程

2009-06-08 16:49:05

Java正則表達(dá)式group

2023-10-07 08:25:09

Java處理工具正則表達(dá)式

2018-09-27 15:25:08

正則表達(dá)式前端

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2022-01-04 11:35:03

Linux Shel正則表達(dá)式Linux

2023-09-13 08:12:45

2009-09-16 17:15:57

正則表達(dá)式引擎

2010-10-19 17:21:16

2024-09-14 09:18:14

Python正則表達(dá)式

2010-03-03 10:51:32

正則表達(dá)式

2011-07-11 12:33:30

JAVA

2010-03-25 18:25:36

Python正則表達(dá)式

2021-01-27 11:34:19

Python正則表達(dá)式字符串

2009-09-16 18:19:34

正則表達(dá)式組

2011-06-02 12:34:16

正則表達(dá)式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)