Java SE 學習筆記(十)—— 正則表達式

目錄

  • 1 引言
  • 2 常用匹配規則
    • 2.1 字符類
    • 2.2 預定義的字符類
    • 2.3 貪婪的量詞
  • 3 正則表達式匹配的 API
  • 4 正則表達式應用
    • 4.1 正則表達式常見應用案例
    • 4.2 正則表達式在字符串方法中的使用
    • 4.3 正則表達式爬取信息

1 引言


😍 正則表達式可以用一些規定的字符來制定規則,并用來校驗數據格式的合法性。

在這里插入圖片描述

2 常用匹配規則


2.1 字符類


默認匹配一個字符

[abc] :只能是a 、b、或者 c

[^abc]: 除了a 、b、 c 之外的任意字符

[a-zA-Z]: a 到 z A 到 Z(范圍)

[a-d[m-p]] :a 到 d 或者 m 到 p(并集)

[a-z&&[def]]: d、e 或 f (交集)

[a-z&&[^bc]]: a 到 z,除了 b、c

[a-z&&[^m-p]] : a 到 z,除了 m 到 p

2.2 預定義的字符類


默認匹配一個字符

.:任意字符

\d:一個數字:[0-9]

\D:非數字:[^0-9]

\s:一個空白字符:[\t\n\x0B\f\r]

\S:非空白字符:[^\s]

\w:英文、數字、下劃線: [a-zA-Z_0-9]

\W:非英文、數字、下劃線: [^\w]

2.3 貪婪的量詞


配合匹配多個字符

?:前面的字符出現 0 次或 1 次

*:前面的字符出現 0 次或 多 次

+:前面的字符出現 1 次或 多 次

{n}:前面的字符出現 n 次

{n,}:前面的字符至少出現 n 次

{n,m}:前面的字符至少出現 n 次,但不超過 m 次

3 正則表達式匹配的 API


字符串對象提供了匹配正則表達式規則的 API

public boolean matches(String regex)

判斷指定字符串是否匹配正則表達式,匹配返回true、不匹配返回false

🙋舉個栗子:

public class Demo {public static void main(String[] args) {// 只能出現a、b、cSystem.out.println("a".matches("[abc]")); // true// 默認只匹配一個字符System.out.println("ab".matches("[abc]")); // falseSystem.out.println("ab".matches("[abc]+")); // true// 不能出現a、b、cSystem.out.println("a".matches("[^abc]")); // falseSystem.out.println("z".matches("[^abc]")); // true// 匹配數字System.out.println("3".matches("\\d")); // trueSystem.out.println("a".matches("\\d")); // false// 匹配數字、字母、_System.out.println("_".matches("\\w")); // trueSystem.out.println("24".matches("\\w")); // falseSystem.out.println("我".matches("\\w")); // falseSystem.out.println("我".matches("\\W")); // trueSystem.out.println("-------------------------");// 校驗密碼:必須是數字、字母、下劃線,至少6位System.out.println("2ugyftyf2".matches("\\w{6,}")); // true// 驗證碼,必須是數字、字符,必須是4位System.out.println("34jh".matches("[a-zA-Z0-9]{4}")); // trueSystem.out.println("34jh".matches("[\\w&&[^_]]{4}")); // true}
}

4 正則表達式應用

4.1 正則表達式常見應用案例


😎 需求

  • 請編寫程序模擬用戶輸入手機號碼、驗證格式正確,并給出提示,直到格式輸入正確為止。
  • 請編寫程序模擬用戶輸入郵箱號碼、驗證格式正確,并給出提示,直到格式輸入正確為止。
  • 請編寫程序模擬用戶輸入電話號碼、驗證格式正確,并給出提示,直到格式輸入正確為止。

😵 分析

  • 定義方法,接收用戶輸入的數據,使用正則表達式完成檢驗,并給出提示。

😇 示例代碼:

import java.util.Scanner;public class Demo {public static void main(String[] args) {checkPhone();checkEmail();checkTel();}public static void checkPhone(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("請您輸入你的注冊手機號碼:");String phone = sc.next();if (phone.matches("1[3-9]\\d{9}")){System.out.println("手機號碼格式正確,注冊成功!");break;}else{System.out.println("手機號碼格式有誤!");}}}public static void checkEmail(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("請您輸入你的郵箱:");String phone = sc.next();// 123@qq.com// 23ggyfgy@163.com// 331122weiwei@pci.com.cn// 這里注意.的正則表達式if (phone.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]){1,2}")){System.out.println("郵箱格式正確,注冊成功!");break;}else{System.out.println("郵箱格式有誤!");}}}public static void checkTel(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("請您輸入你的電話號碼:");String phone = sc.next();if (phone.matches("0\\d{2,6}-?\\d{5,20}")){System.out.println("電話號碼格式正確,注冊成功!");break;}else{System.out.println("電話號碼格式有誤!");}}}
}

4.2 正則表達式在字符串方法中的使用


在這里插入圖片描述
🙋舉個栗子:

public class Demo {public static void main(String[] args) {String names = "張三huuigh7566756李四vtftr65675王五tftyftyfty999趙六";String[] arrs = names.split("\\w+");for (int i = 0; i < arrs.length; i++) {System.out.println(arrs[i]);}/*/張三李四王五趙六*/String s = names.replaceAll("\\w+", "\\\\");System.out.println(s); // 張三\李四\王五\趙六String s1 = names.replaceAll("\\w+", "\t");System.out.println(s1); // 張三	李四	王五	趙六String s2 = names.replaceAll("\\w+", "\\t"); // 同直接替換成tSystem.out.println(s2); // 張三t李四t王五t趙六}
}

4.3 正則表達式爬取信息


正則表達式支持爬取指定的信息

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo {public static void main(String[] args) {String rs = "來學習Java,電話020-43422424,或者聯系郵箱" +"ibeit@ibeit.cn,電話18762832533,0203232323" +"郵箱bozai@itcast.cn,400-150-3233 ,4001073232";// 需求:從上面的內容中爬取出 電話號碼和郵箱// 1.定義爬取規則String regex = "(\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2})|" +"(1[3-9]\\d{9})|(0\\d{2,5}-?\\d{5,15})|400-?\\d{3,8}-?\\d{3,8}";// 2.編譯正則表達式成為一個匹配規則對象Pattern pattern = Pattern.compile(regex);// 3.通過匹配規則對象得到一個匹配數據內容的匹配器對象Matcher matcher = pattern.matcher(rs);// 4.通過匹配器去內容中爬取出信息while (matcher.find()) {System.out.println(matcher.group());}/*020-43422424ibeit@ibeit.cn187628325330203232323bozai@itcast.cn400-150-32334001073232* */}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38088.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38088.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38088.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

I2C連續讀寫實現

IIC系列文章: (1)I2C 接口控制器理論講解 (2)I2C接口控制設計與實現 (3)I2C連續讀寫實現 文章目錄 前言一、 i2c_bit_shift 模塊分析二、 i2c_control 模塊實現三、 i2c_control 模塊仿真測試前言 上文的 i2c_bit_shift 模塊說完了,我們發現實現一個字節的寫操作還是可以實現…

【UniApp開發小程序】小程序首頁(展示商品、商品搜索、商品分類搜索)【后端基于若依管理系統開發】

文章目錄 界面效果界面實現工具js頁面首頁讓文字只顯示兩行路由跳轉傳遞對象將商品分為兩列顯示使用中劃線劃掉原價 后端商品controllerservicemappersql 界面效果 【說明】 界面中商品的圖片來源于閑魚&#xff0c;若侵權請聯系刪除關于商品分類頁面的實現&#xff0c;請在我…

MySQL基礎篇

一、MySQL基礎 黑窗口命令操作: 連接MySQL服務器&#xff1a;mysql -u用戶名 -p密碼 [-h數據庫服務器的IP地址 -P端口號] ? -h 參數不加&#xff0c;默認連接的是本地 127.0.0.1 的MySQL服務器 -P 參數不加&#xff0c;默認連接的端口號是 3306 、 **上述指令&#xff0c;可…

建庫、建表、修改表、復制表、字符類型、數值類型、枚舉類型、日期時間類型、檢索目錄、數據導入命令、數據導入步驟、數據導出命令、非空、默認值、唯一索

Top NSD DBA DAY04 案例1&#xff1a;表管理案例2&#xff1a;數據類型案例3&#xff1a;數據批量處理案例4&#xff1a;表頭基本約束 1 案例1&#xff1a;表管理 1.1 問題 建庫練習建表練習修改表練習 1.2 方案 在MySQL50主機完成練習。 1.3 步驟 實現此案例需要按照如…

升級版“斯坦福AI小鎮”來了,這次的AI Agents有點不一樣

文娛是大模型落地的一個重要方向。 數科星球原創 作者丨苑晶 編輯丨大兔 八月中旬&#xff0c;AIGC游戲的風潮撲面而來。在游戲大廠按捺不住投入巨資的背景下&#xff0c;數科星球&#xff08;ID&#xff1a;digital-planet&#xff09;接觸到了多名業內精英也投身于此。人工…

Kafka第一課概述與安裝

生產經驗 面試重點 Broker面試重點 代碼,開發重點 67 章了解 如何記錄行為數據 1. Kafka概述 1.產生原因 前端 傳到日志 日志傳到Flume 傳到HADOOP 但是如果數據特比大&#xff0c;HADOOP就承受不住了 2.Kafka解決問題 控流消峰 Flume傳給Kafka 存到Kafka Hadoop 從Kafka…

Qt掃盲-Qt Paint System 概述

Qt Paint System 概述 一、概述二、繪圖設備和后端1. Widget2. Image3. Pixmap4. OpenGL繪制設備5. Picture6. 自定義繪制后端 三、繪圖與填充1. Drawing2. 填充 Filling 四、坐標系統1. 渲染Window-Viewport轉換 五、讀寫圖像文件1. QMovie 六、繪圖相關設備 一、概述 Qt的pa…

【數據庫】P2 SELECT 與 SQL注釋

SELECT 檢索單個列檢索多個列檢索所有列不重復的結果 DISTINCT限制結果 LIMIT 與 OFFSET注釋行內注釋多行注釋 檢索單個列 從 Products 表中檢索一個名為 prod_name 的列&#xff1b; SELECT prod_name FROM Products;【1】返回的數據可能是無序的&#xff0c;除非規定了順序…

7.5.tensorRT高級(2)-RAII接口模式下的生產者消費者多batch實現

目錄 前言1. RAII接口模式封裝生產者消費者2. 問答環節總結 前言 杜老師推出的 tensorRT從零起步高性能部署 課程&#xff0c;之前有看過一遍&#xff0c;但是沒有做筆記&#xff0c;很多東西也忘了。這次重新擼一遍&#xff0c;順便記記筆記。 本次課程學習 tensorRT 高級-RAI…

原生JS手寫掃雷小游戲

場景 實現一個完整的掃雷游戲需要一些復雜的邏輯和界面交互。我將為你提供一個簡化版的掃雷游戲示例&#xff0c;幫助你入門。請注意&#xff0c;這只是一個基本示例&#xff0c;你可以根據自己的需求進行擴展和改進。 思路 創建游戲板&#xff08;Grid&#xff09;&#xff1…

軟考:中級軟件設計師:文件管理,索引文件結構,樹型文件結構,位示圖,數據傳輸方式,微內核

軟考&#xff1a;中級軟件設計師: 提示&#xff1a;系列被面試官問的問題&#xff0c;我自己當時不會&#xff0c;所以下來自己復盤一下&#xff0c;認真學習和總結&#xff0c;以應對未來更多的可能性 關于互聯網大廠的筆試面試&#xff0c;都是需要細心準備的 &#xff08;1…

小森動畫回憶錄(二)-瀏覽哆啦a夢的四次元口袋

// DoraemonProps結構用于存儲單個道具信息 struct DoraemonProps{// 道具名稱string name;// 道具用途string UseOfProps; };// 從文件加載哆啦A夢道具信息到vector void LoadDoraemonProps(vector<DoraemonProps>& DoraemonProps) {// 創建文件輸入流ifstream str…

人臉識別技術應用安全管理規定(試行)

近年來&#xff0c;人臉識別技術不斷成熟&#xff0c;已大量應用于治安管理、金融支付、門禁考勤等諸多領域&#xff0c;極大便捷了公眾生活。然而&#xff0c;人臉識別技術在得到廣泛應用的同時&#xff0c;仍存在一些不規范現象。人臉識別因其技術特點&#xff0c;涉及公眾敏…

node.js 基礎高并發案例

什么是高并發 高并發是指系統在同一時間段內需要處理大量的并發請求或同時進行大量的操作。在計算機領域中&#xff0c;高并發通常指的是在短時間內有大量的用戶或客戶端同時訪問系統或進行操作&#xff0c;對系統的并發處理能力提出了較高的要求。 高并發的特點包括 大量的…

Python學習筆記第五十五天(Pandas CSV文件)

Python學習筆記第五十五天 Pandas CSV 文件read_csv()to_string()to_csv() 數據處理head()tail()fillna() info() 后記 Pandas CSV 文件 CSV&#xff08;Comma-Separated Values&#xff0c;逗號分隔值&#xff0c;有時也稱為字符分隔值&#xff0c;因為分隔字符也可以不是逗號…

【嵌入式學習筆記】嵌入式入門7——IIC總線協議

1.IIC簡介 IIC即Inter Integrated Circuit&#xff0c;集成電路總線&#xff0c;是一種同步&#xff0c;串行&#xff0c;半雙工通信總線。 IIC總線協議——總線就是傳輸數據通道&#xff0c;協議就是傳輸數據的規則&#xff0c;有以下特點&#xff1a; 由時鐘線SCL和數據線S…

ES踩坑記錄之集群間通信異常造成節點無法加入

問題描述 公司新搭了一套ES集群&#xff0c;4臺機器&#xff0c;ES版本7.5.0&#xff0c;前期搭建十分順利&#xff0c;但集群運行一段時間后會出現問題。問題具體體現為節點間通訊異常&#xff0c;集群會重新選主&#xff0c;但選主之后只能通過新的主節點進行集群操作&#…

【Linux】可重入函數 volatile關鍵字 以及SIGCHLD信號

可重入函數 volatile關鍵字 以及SIGCHLD信號 一、可重入函數1、引入2、可重入函數的判斷 二、volatile關鍵字1、引入2、關于編譯器的優化的簡單討論 三、SIGCHLD信號 一、可重入函數 1、引入 我們來先看一個例子來幫助我們理解什么是可重入函數&#xff1a; 假設我們現在要對…

EthGlobal 巴黎站 Chainlink 獲獎項目介紹

在 Web3 中&#xff0c;每一周都至關重要。項目的發布、版本的發布以及協議的更新以驚人的速度推出。開發者必須保持學習&#xff0c;隨時了解最新的工具&#xff0c;并將所有他們所學的東西&#xff08;無論是舊的還是新的&#xff09;聯系起來&#xff0c;以構建推動 Web3 技…

PLUS操作流程、應用與實踐,多源不同分辨率數據的處理、ArcGIS的應用、PLUS模型的應用、InVEST模型的應用

PLUS模型是由中國地質大學&#xff08;武漢&#xff09;地理與信息工程學院高性能空間計算智能實驗室開發&#xff0c;是一個基于柵格數據的可用于斑塊尺度土地利用/土地覆蓋(LULC)變化模擬的元胞自動機(CA)模型。PLUS模型集成了基于土地擴張分析的規則挖掘方法和基于多類型隨機…