正則表達式詳解(regular expression)

💡 正則表達式(Regular Expression, regex)知識點總結 💡

正則表達式是一種用于匹配字符串的模式,廣泛用于搜索、替換、驗證等操作。


📌 正則表達式的主要作用

1?? 字符串匹配 🧐

  • 檢查一個字符串是否符合某種模式。
  • 例如,驗證用戶輸入的郵箱手機號密碼強度等。

2?? 搜索和提取 🔍

  • 在大量文本中找到符合要求的內容。
  • 例如,從網頁中提取URL、郵箱、電話號碼等。

3?? 字符串替換 🔄

  • 將符合規則的文本替換為指定內容。
  • 例如,把多個空格替換成一個空格

4?? 數據格式化 ??

  • 規范化文本數據,如日期格式轉換、去除特殊字符等。

5?? 日志分析 📊

  • 通過正則表達式分析日志文件,提取錯誤信息IP 地址等重要數據。

📌 正則表達式的基礎

  1. 普通字符匹配

    • abc 只能匹配 "abc",不會匹配 "aabc""abcd" 等。
  2. 特殊字符(元字符)

    元字符含義示例
    .任意單個字符(換行符除外)"a.c" 可匹配 "abc""aac"
    \d數字 [0-9]"12\d" 可匹配 "123""125"
    \w字母、數字或下劃線 [a-zA-Z0-9_]"\w+" 可匹配 "hello123"
    \s空白字符(空格、制表符、換行符)"a\sb" 可匹配 "a b"
    \b單詞邊界"\bcat\b" 匹配 "cat" 但不匹配 "catalog"
    ^匹配行首"^abc" 只匹配 "abc" 在行首的情況
    $匹配行尾"xyz$" 只匹配 "xyz" 在行尾的情況

📌 量詞(控制匹配次數)

量詞含義示例
*匹配 0 次或多次a* 匹配 """a""aaaa"
+匹配 1 次或多次a+ 匹配 "a""aaaa",但不匹配 ""
?匹配 0 次或 1 次a? 匹配 """a"
{n}匹配 na{3} 僅匹配 "aaa"
{n,}至少匹配 na{2,} 匹配 "aa""aaa"
{n,m}匹配 nma{2,4} 匹配 "aa""aaa""aaaa"

📌 字符類(Character Classes)

語法含義示例
[abc]只匹配 abcgr[ae]y 可匹配 "gray""grey"
[^abc]a、b、c 以外的任何字符"[^aeiou]" 匹配所有輔音字母
[0-9]匹配 0~9 的任何數字"[0-9]+" 匹配 "123""456"
[a-z]匹配小寫字母"[a-z]+" 匹配 "hello"
[A-Z]匹配大寫字母"[A-Z]+" 匹配 "HELLO"

📌 邏輯運算符

語法含義示例
``邏輯 OR(或)
()分組"(ab)+" 可匹配 "ab""abab"
(?:...)非捕獲分組"(?:ab)+" 僅匹配 "abab",但不存儲匹配內容

📌 零寬斷言

? 下面是正則表達式中 (?=) 等相關的零寬斷言的作用和示例,整理成表格供你參考 📜👇

表達式名稱 🏷作用 💡示例
(?=...)正向先行斷言 ?匹配當前位置,后面必須滿足 ... 的條件,但不消耗字符\d(?=px) 匹配**5px 中的 5**,但不匹配 5em
(?!...)負向先行斷言 ?匹配當前位置,后面不能...\d(?!px) 匹配 5em5,但不匹配 5px
(?<=...)正向后行斷言 🔄匹配當前位置,前面必須滿足 ...(?<=\$)\d+ 匹配**$100 中的 100**,但不匹配 USD100
(?<!...)負向后行斷言 🚫匹配當前位置,前面不能...(?<!\$)\d+ 匹配 USD100100,但不匹配 $100

💡 小貼士

  • 先行斷言(?=...) & (?!...)檢查后面的字符,但不消耗它們。
  • 后行斷言(?<=...) & (?<!...)檢查前面的字符,但不消耗它們。
  • 斷言是零寬匹配(不占字符),用于復雜匹配規則!

📌 貪婪模式與懶惰模式

在正則表達式中,貪婪模式(Greedy Mode)指的是匹配時盡可能多地匹配字符。

例如:

  • a.*b"acbcb" 上的貪婪匹配結果是 "acbcb"(盡可能匹配最長的內容)。
  • 如果使用 懶惰模式(Lazy Mode)a.*?b,則匹配的結果是 "acb"(盡可能匹配最短的內容)。

? 貪婪匹配(Greedy Match)VS 懶惰匹配(Lazy Match)

模式符號行為
貪婪匹配(Greedy).*盡可能多地匹配
懶惰匹配(Lazy).*?盡可能少地匹配
占有匹配(Possessive).*+一次性匹配,不回溯

💡 記住:貪婪(Greedy)匹配會盡可能多地匹配字符,而懶惰(Lazy)匹配會盡可能少地匹配字符。🚀

📌 捕獲分組與非捕獲分組

📌 常見正則表達式

1?? 匹配郵箱 📧:

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

? 可匹配 "test.email@example.com"

2?? 匹配手機號 📱(以中國手機號 1 開頭):

^1[3-9]\d{9}$

? 可匹配 "13812345678"

3?? 匹配 IP 地址 🌐:

^(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])$

? 可匹配 "192.168.1.1"

4?? 匹配日期(YYYY-MM-DD) 📆:

^(19|20)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

? 可匹配 "2024-03-14"


📌 Java 正則表達式示例

import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "hello regex 123!";String pattern = "\\d+"; // 匹配數字Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(text);while (m.find()) {System.out.println("匹配到: " + m.group());}}
}

🔹 輸出

匹配到: 123

📌 小結

? 正則表達式的核心知識點
? 元字符(特殊字符). \d \w \s ^ $
? 量詞* + ? {n,m}
? 字符類[abc] [a-z] [^0-9]
? 邏輯運算| ()
? 常見應用:郵箱、手機號、IP 地址等

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

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

相關文章

全球化2.0 | ZStack云計算系統工程師(ZCCE)國際認證培訓成功舉辦

近日&#xff0c;ZStack云計算系統工程師&#xff08;ZCCE&#xff09;國際認證培訓在上海成功舉辦。本次培訓采用 "線下 線上直播" 雙軌模式&#xff0c;同步開設中文與英文課程&#xff0c;吸引了來自中國、東南亞、獨聯體、北美、中東等多個國家和地區的近 90 名…

C++學習之nginx+fastDFS

目錄 1.知識點概述 2.fastcgi復習 3.文件上傳流程分析 4.文件下載流程和優化 5.在存儲節點上安裝nginx和fastdfs插件 6.mod-fdsf.com配置文件修改 7.解決nginx的worker無法啟動&#xff0c;拷貝配置文件操作 8.客戶 通過瀏覽器訪問存儲節點404問題 9.nginx服務器處理資…

【AIGC】Win10系統極速部署Docker+Ragflow+Dify

【AIGC】WIN10僅3步部署DockerRagflowDify 一、 Docker快速部署1.F2進入bios界面&#xff0c;按F7設置開啟VMX虛擬化技術。保存并退出。2.打開控制面板配置開啟服務3.到官網下載docker安裝包&#xff0c;一鍵安裝&#xff08;全部默認勾選&#xff09; 二、 RagFlow快速部署1.確…

token升級(考慮在分布式環境中布置token,結合session保證請求調用過程中token不會過期。)

思路&#xff1a; 首先&#xff0c;用戶的需求是確保使用同一個Token的外部調用都在一個Session中處理。 需要考慮Token與Session綁定、安全措施、Session管理、分布式處理等。 使用Redis作為Session存儲&#xff0c; 在Java中 通過Spring Data Redis或Lettuce庫實現。 2.生成…

新一代電子數據取證專家 | 蘇州龍信信息科技有限公司

本文關鍵詞&#xff1a;電子取證、手機取證、計算機取證、云取證 關于我們About us 蘇州龍信信息科技有限公司專注于電子數據取證、大數據、信息安全等領域&#xff0c;核心業務主要涵蓋取證工具研發、大數據融合分析、案件技術支持、取證能力培訓等&#xff0c;先后為執法部門…

研究生研究方向系統基于springboot SSM

目錄 摘要 一、系統背景與目的 二、開發流程 三、系統架構與技術選型 四、功能分析 4.1 用戶角色與權限管理 4.2研究方向管理功能 4.3學習資源管理功能 4.4科研項目跟蹤功能 4.5學術交流與分享功能 4.6導師指導與評估功能 摘要 基于Spring Boot的研究生研究方向系統…

[解決] PDF轉圖片,中文亂碼或顯示方框的解決方案

在Java開發中,將PDF文件轉換為圖片是一項常見的需求,但過程中可能會遇到中文亂碼或顯示方框的問題。本文將深入探討這一問題,并提供詳細的解決方案,幫助開發者順利地完成PDF到圖片的轉換。 一、問題現象 在使用Java庫(如Apache PDFBox)將PDF轉換為圖片時,如果PDF文件中…

「JavaScript深入」WebSocket:高效的雙向實時通信技術

WebSocket WebSocket 的特點1. 全雙工通信2. 持久連接3. 低延遲4. 二進制和文本支持5. 連接管理6. 二進制數據傳輸 WebSocket 協議詳解1. 握手過程2. 數據幀結構 WebSocket 的實現服務器端實現&#xff08;Node.js ws庫&#xff09;1. 基礎服務器2. 廣播功能實現3. 心跳機制客…

ABAP 長文本編輯器

加個屏幕 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------…

postman小白教程(從入門到實戰,詳細教學)

目錄 1. postman介紹 2. 下載地址 3. 安裝流程 4. 注冊postman賬號 ① 打開postman&#xff0c;點擊【創建賬號】或【登錄】&#xff0c;會跳轉到瀏覽器 ② 若已有賬號可以直接登錄&#xff1b;若無賬號&#xff0c;則創建新賬號 ③ 若登錄成功會彈出提示框&#xff0c;…

Qt 實現波浪填充的圓形進度顯示

話不多說&#xff0c;先上效果圖 代碼示例&#xff1a; #include <QApplication> #include <QWidget> #include <QPainter> #include <QPropertyAnimation> #include <QTimer> #include <cmath>class WaveProgressBar : public QWidget {…

Linux vim mode | raw / cooked

注&#xff1a;機翻&#xff0c;未校。 vim terminal “raw” mode Vim 終端 “raw” 模式 1. 原始模式與已處理模式的區別 We know vim puts the terminal in “raw” mode where it receives keystrokes as they are typed, opposed to “cooked” mode where the command…

docker部署dify

1.安裝docker 參考鏈接 https://ascendking.blog.csdn.net/article/details/136407383 設置docker源 vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "http…

Python Seaborn面試題及參考答案

目錄 如何用 stripplot () 繪制帶隨機偏移的分類散點圖?如何控制 jitter 參數? swarmplot () 如何避免散點重疊?適用場景與數據量限制是什么? 使用 catplot () 繪制箱線圖時,如何通過 kind 參數切換圖表類型? 如何通過 hue 參數在分類圖中添加第三個維度(如性別)? …

Linux應用:Linux的信號

什么是信號 信號是一種軟件中斷&#xff0c;用于通知進程系統中發生了某種特定事件。它是操作系統與進程之間&#xff0c;以及進程與進程之間進行異步通信的一種方式。在 Linux 系統中&#xff0c;信號是一種比較簡單的進程間通信機制。當一個信號產生時&#xff0c;內核會通過…

實時監控、數據分析!Web-Check構建你的網站健康檢測系統實操方案

文章目錄 前言1.關于Web-Check2.功能特點3.安裝Docker4.創建并啟動Web-Check容器5.本地訪問測試6.公網遠程訪問本地Web-Check7.內網穿透工具安裝8.創建遠程連接公網地址9.使用固定公網地址遠程訪問 前言 在數字化運維領域&#xff0c;網站穩定性保障始終是開發者和運維團隊的核…

win32匯編環境,網絡編程入門之八

;在上一教程里&#xff0c;我們學習了簡單的處理服務器返回的數據 ;在這一教程里&#xff0c;我們了解一下&#xff0c;當連接上網站后&#xff0c;應該發送什么數據過去的問題 ;這里有個簡單的方式學習&#xff0c;以下是一個示例 ;我們上網的時候可以用谷歌瀏覽器&#xff0c…

windows 平臺編譯openssl

文章目錄 準備環境安裝perl安裝NASM獲取源碼 源碼編譯配置編譯 準備環境 安裝perl 下載Perl 5.40.0.1 Portable zip strawberryperl 解壓后設置系統環境變量 測試安裝是否成功 perl --versionThis is perl 5, version 40, subversion 0 (v5.40.0) built for MSWin32-x64-m…

一文了解ThreadLocal

什么是ThreadLocal&#xff1f; ThreadLocal是每個線程私有的&#xff0c;線程可以把自己的私有數據放到ThreadLocal里面&#xff0c;不用擔心其他線程訪問到自己ThreadLocal。 通過set()方法將值存入ThreadLocal或者修改值&#xff0c;get()方法取出值&#xff0c;remove()方…

OpenWrt開發第6篇:怎么添加OpenWrt的Package-基于Raspberry Pi 4B開發板

文/指尖動聽知識庫-谷谷 文章為付費內容,商業行為,禁止私自轉載及抄襲,違者必究!!! 文章專欄:Openwrt開發-基于Raspberry Pi 4B開發板 1.如圖1所示,首先創建軟件包所在的目錄,在openwrt根目錄中執行mkdir -p package/mypackages/helloworld命令;