Java正則表達(dá)式詳解及實用案例(附詳細(xì)代碼)
前言
正則表達(dá)式是一種強(qiáng)大的工具,用于處理字符串匹配和文本解析。在這篇博客中,我們將通過代碼示例,詳細(xì)講解正則表達(dá)式的基本語法規(guī)則以及在Java中的實際應(yīng)用
什么是正則表達(dá)式?
正則表達(dá)式(Regular Expression)是一種用來描述字符模式的規(guī)則。它可以用來驗證字符串是否符合規(guī)則,或者從一段文本中提取特定的子字符串
正則表達(dá)式的典型應(yīng)用:
- 字符串校驗(如校驗手機(jī)號碼、郵箱地址等)
- 文本搜索與替換
- 數(shù)據(jù)解析
Java 正則表達(dá)式的基本用法
在Java中,Pattern
和Matcher
類是處理正則表達(dá)式的核心。以下是幾個關(guān)鍵概念和用法:
(1) 字符類
字符類用來匹配特定范圍內(nèi)的字符。以下是常見的字符類:
表達(dá)式 | 描述 |
---|---|
[abc] | 匹配 a 、b 或 c |
[^abc] | 匹配除 a 、b 和 c 以外的字符 |
[a-zA-Z] | 匹配任意大小寫英文字母 |
[a-d[m-p]] | 匹配 a-d 或 m-p 范圍內(nèi)的字符 |
[a-z&&[^bc]] | 匹配 a-z 中除了 b 和 c 的字符 |
代碼示例:
System.out.println("a".matches("[abc]")); // true System.out.println("z".matches("[abc]")); // false System.out.println("bc".matches("[abc][abc]")); // true
(2) 預(yù)定義字符類
預(yù)定義字符類是字符類的簡化寫法,用來匹配常見的字符類型
表達(dá)式 | 描述 |
---|---|
. | 匹配任意字符 |
\d | 匹配數(shù)字,等價于 [0-9] |
\D | 匹配非數(shù)字,等價于 [^0-9] |
\s | 匹配空白字符 |
\S | 匹配非空白字符 |
\w | 匹配字母、數(shù)字、下劃線,等價于 [a-zA-Z0-9_] |
\W | 匹配非字母、數(shù)字、下劃線 |
代碼示例:
System.out.println("123".matches("\\d+")); // true System.out.println("@".matches("\\w")); // false System.out.println("abc_123".matches("\\w+")); // true
(3) 數(shù)量詞
數(shù)量詞用來指定字符出現(xiàn)的次數(shù)
表達(dá)式 | 描述 |
---|---|
X? | 匹配 X 0 次或 1 次 |
X* | 匹配 X 0 次或多次 |
X+ | 匹配 X 1 次或多次 |
X{n} | 匹配 X 恰好出現(xiàn) n 次 |
X{n,} | 匹配 X 至少出現(xiàn) n 次 |
X{n,m} | 匹配 X 至少出現(xiàn) n 次但不超過 m 次 |
代碼示例:
System.out.println("123456789".matches("\\d{9}")); // true System.out.println("123".matches("\\d{1,5}")); // true
正則表達(dá)式實際應(yīng)用
(1) 校驗規(guī)則
校驗QQ號
規(guī)則:6-20位數(shù)字,不能以 0 開頭
String qq = "12345678987"; System.out.println(qq.matches("[1-9]\\d{5,19}")); // true
校驗手機(jī)號碼
規(guī)則:以 1
開頭,第二位是 3-9
,后面跟 9 位數(shù)字
String phone = "13933447894"; System.out.println(phone.matches("1[3-9]\\d{9}")); // true
校驗郵箱地址
規(guī)則:用戶名部分允許字母、數(shù)字、下劃線,域名部分允許字母和數(shù)字,支持多級后綴
String email = "gaomengsuanjia@163.com"; System.out.println(email.matches("\\w+([-+.']\\w+)*@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,})+")); // true
校驗座機(jī)號碼
規(guī)則:開頭以 0
,后接 2-3 位區(qū)號,支持帶或不帶連字符
String tel = "020-5698137"; System.out.println(tel.matches("0\\d{2,3}-?[1-9]\\d{4,9}")); // true
(2) 文本查找
利用 Pattern
和 Matcher
可以在大段文本中找到符合條件的子串
查找包含版本號的 Java 關(guān)鍵字
String text = "java8和java11是長期支持版本,下一個是java17。"; Pattern pattern = Pattern.compile("java\\d{0,2}"); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println(matcher.group()); } // 輸出:java8、java11、java17
通過以上代碼示例和解釋,我們了解了正則表達(dá)式的基本規(guī)則及在Java中的應(yīng)用方式。正則表達(dá)式作為字符串處理的利器,可以極大提高開發(fā)效率。在實際項目中,我們可以利用正則表達(dá)式解決各種文本匹配和校驗問題
最后,為了幫助大家復(fù)習(xí)正則表達(dá)式,可以玩一個小游戲
總結(jié)
到此這篇關(guān)于Java正則表達(dá)式詳解及實用案例的文章就介紹到這了,更多相關(guān)Java正則表達(dá)式實用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot配置devtools實現(xiàn)熱部署
本篇文章主要介紹了詳解SpringBoot配置devtools實現(xiàn)熱部署 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例
這篇文章主要介紹了SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-12-12Java實現(xiàn)獲取客戶端真實IP方法小結(jié)
本文給大家匯總介紹了2種使用java實現(xiàn)獲取客戶端真實IP的方法,主要用于獲取使用了代理訪問的來訪者的IP,有需要的小伙伴可以參考下。2016-03-03關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用
這篇文章主要介紹了關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用,網(wǎng)上的知識有些可能是錯誤的,關(guān)于?equals()?方法的理解,大家討論不一樣,需要的朋友可以參考下2023-04-04IDEA配置Gradle及Gradle安裝的實現(xiàn)步驟
本文主要介紹了IDEA配置Gradle及Gradle安裝的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08