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

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

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

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

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

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

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

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

正則表達(dá)式組成

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

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

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

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

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

Regex 類詳解

1.Matcher

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

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

2.Pattern

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

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

3.PatternSyntaxException

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

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

4.MatchResult

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

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

正則使用場景

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

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

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

示例演示

1.郵箱驗證

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

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

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

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

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

運行結(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)建一個匹配器對象,用于匹配給定的郵箱字符串。
  • matcher.matches():檢查整個字符串是否與正則表達(dá)式匹配。

2.拆分字符串

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

責(zé)任編輯:趙寧寧 來源: 猿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教程

2020-09-04 09:16:04

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

2018-09-27 15:25:08

正則表達(dá)式前端

2023-10-07 08:25:09

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

2009-06-08 16:49:05

Java正則表達(dá)式group

2024-09-14 09:18:14

Python正則表達(dá)式

2009-09-16 17:15:57

正則表達(dá)式引擎

2022-01-04 11:35:03

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

2023-09-13 08:12:45

2011-07-11 12:33:30

JAVA

2010-03-03 10:51:32

正則表達(dá)式

2010-10-19 17:21:16

2025-01-13 12:00:00

反射Java開發(fā)

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2022-03-28 06:19:14

正則表達(dá)式開發(fā)

2019-07-17 15:45:47

正則表達(dá)式字符串前端
點贊
收藏

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

主站蜘蛛池模板: 欧美综合网 | 日韩欧美中文 | 欧美成人影院在线 | 婷婷激情在线 | 国产精品一区二区欧美 | jizz18国产| 日韩精品在线观看一区二区三区 | 爱爱视频在线观看 | 欧美日韩在线免费观看 | 激情伊人网 | 涩涩片影院 | 欧美激情 一区 | 亚洲视频欧美视频 | 亚洲一区二区中文字幕 | 男人天堂99 | 久久久夜 | 中文字幕在线精品 | 激情五月婷婷 | 午夜视频网站 | 免费黄色网址视频 | 国产午夜精品一区二区三区四区 | 拍戏被cao翻了h承欢 | 一级黄色片毛片 | 美女张开腿露出尿口 | 日韩一级不卡 | 亚洲欧美激情精品一区二区 | 亚洲欧美国产精品一区二区 | va精品 | 国产亚洲精品精品国产亚洲综合 | 免费在线看a | 特级黄一级播放 | 欧美在线视频一区二区 | 宅男伊人 | 一区视频 | 久久激情视频 | 国产xxxx搡xxxxx搡麻豆 | 91一区二区在线观看 | 日韩精品在线一区 | 成人精品国产一区二区4080 | 国产精品美女久久久av超清 | 欧美激情精品久久久久久 |