亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

一文搞懂正則表達(dá)式

admin
2024年1月24日 23:4 本文熱度 1626

在日常的開發(fā)工作中,正則表達(dá)式猶如空氣般無(wú)所不在,扮演著不可或缺的角色。我們時(shí)常依賴正則來解決各類問題,例如精準(zhǔn)定位符合特定規(guī)則的文本。然而,我注意到許多開發(fā)者對(duì)正則持有“復(fù)雜難記”的觀念,難以全面掌握這一強(qiáng)大的工具,以至于每當(dāng)在實(shí)際工作中遇到需要運(yùn)用正則表達(dá)式的情況時(shí),往往不得不翻閱資料才能編寫出合適的正則。

正則表達(dá)式作為一種無(wú)比強(qiáng)大的工具,無(wú)疑值得我們?cè)陂_發(fā)過程中深入學(xué)習(xí)并熟練運(yùn)用。它能幫助我們高效解決各類復(fù)雜問題,顯著提升工作效率,從而讓我們的編程之旅更加得心應(yīng)手,游刃有余。

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

你可以這樣來理解正則是一個(gè)非常強(qiáng)大的文本處理工具,我們可以利用它來教驗(yàn)數(shù)據(jù)的有效性,比如用戶輸入的手機(jī)號(hào)是不是符合規(guī)則;另外,也可以用正則從文本中提取需要的內(nèi)容,比如從網(wǎng)頁(yè)中抽取我們需要的數(shù)據(jù);此外,正則還可以用來做文本內(nèi)容的替換從而得到我們想要的內(nèi)容,可以說正則已經(jīng)滲透到了我們?nèi)粘9ぷ鞯姆椒矫婷?,不難發(fā)現(xiàn)學(xué)習(xí)并利用好正則至關(guān)重要。

怎么理解正則表達(dá)式呢?簡(jiǎn)單來說它就是描述字符串的規(guī)則,最簡(jiǎn)單的正則就是單個(gè)的普通字符,比如字 a 它可以匹配 Hanmeimei is a girl 中的 H 之后的 a 也可以匹配 is 之后的 a,這個(gè)和我們?nèi)粘R姷降钠胀ǖ淖址檎移鋵?shí)是一樣的。

除了剛剛說的普通的字符串的查找之外,有時(shí)候我們還需要查找符合某個(gè)規(guī)則的文本;比如我們想找出字符串中所有的數(shù)字,而任意數(shù)字在正則中可以用 \d 來表示,它表示 0~9 這十個(gè)數(shù)字。

單個(gè)的 \d 只能表示一個(gè)數(shù)字我們?nèi)绻诤竺婕由狭吭~,比如 \d{11} 這樣的話就表示 11 位數(shù)字。我們的手機(jī)號(hào)就是 11 位的,如果文本中只有姓名和手機(jī)號(hào),我們就可以用這個(gè)提取出里面的手機(jī)號(hào)。

正則不僅僅能找出符合要求的文本,還可以對(duì)文本進(jìn)行替換。比如說我們有這樣一段文本 the cat cat is in the the hat.,我們想要從文本中找出重復(fù)的單詞把它統(tǒng)一替換成一個(gè)單詞,最終的結(jié)果就是 the cat is in the hat.,可以發(fā)現(xiàn)正則在日常工作中使用非常廣泛也非常重要。

原字符

正則表達(dá)式中其實(shí)有很多的原字符,比如 \d,它在正則中不代表反斜杠和字母 d 而是代表任意的數(shù)字,所謂的原字符就是指正則表達(dá)式中具有特殊含義的那些專用的字符,正則表達(dá)式中原字符非常多那么我們?nèi)绾尾拍苡涀∷鼈兡??在這里給我給大家介紹一個(gè)方法就是分類記憶。

我們可以把原字符大概的分成這么幾類,有基礎(chǔ)常用的、特殊的空白符、表示某個(gè)范圍的、表示邊界的、表示次數(shù)的量詞;原字符雖然非常的多但如果我們按照分類去理解記憶,效果就會(huì)好很多。接下來我們就按照前面說的原字符的分類來逐一的進(jìn)行講解。

基礎(chǔ)的原字符

首先非常常用的基礎(chǔ)的原字符,比如英文的點(diǎn)它表示換行以外的任意字符,\d 表示任意的數(shù)字,\w 表示任意的數(shù)字字母或者下滑線,而 \s 表示任意的空白符,另外還有與之對(duì)應(yīng)的 \D\W 和 \S 分別表示著和原來相反的意思。

特殊的空白符

接著我們來看一下空白符有哪些,其實(shí)我們?cè)诰幊讨薪?jīng)常會(huì)遇到比如說換行符 \n  TAB 制表符 \t 等,有編程經(jīng)驗(yàn)的同學(xué)應(yīng)該知道在每行文本的結(jié)束的位置都有換行,那么不同的系統(tǒng)會(huì)稍有區(qū)別比如說像 Windows 系統(tǒng)是 \r\n,Linux 和 MacOS 是 是\n,那么在正則中這些空白符也是類似的只要記住它們就行,平時(shí)使用正則大部分場(chǎng)景我們使用\s 就可以滿足需求。

表示數(shù)量的原字符

剛剛我們說到的基礎(chǔ)的原字符也好,空白符也好,它們都只能匹配單個(gè)字符比如說 \d 只能匹配一個(gè)數(shù)字,有時(shí)候我們需要匹配單個(gè)字符或某個(gè)部分來重復(fù) N 次或者至少出現(xiàn)一次或者最多出現(xiàn)三次這樣,這就需要我們來用到表示量次的原字符。

在正則中英文的 * 它代表出現(xiàn) 0 到多次 + 表示出現(xiàn) 1 到多次 ? 表示 0 到 1 次,而 {m,n} 可以表示 m 到 n 次。

就比如說由于業(yè)務(wù)需要我們?cè)谌罩浦刑砑恿?user 這樣一個(gè)字段,但舊日志可能是沒有這個(gè)字段的;這個(gè)時(shí)候我們可以使用 ? 來表示它出現(xiàn) 0 次或 1 次,在這里就可以表示 User 這個(gè)字段存在和不存在兩種情況。

范圍原字符

學(xué)習(xí)到了量詞我們就可以使用 /d{11} 來匹配所有的手機(jī)號(hào),但是我們要明白這個(gè)范圍比較大有一些不是手機(jī)號(hào)的也能匹配上,比如說 11 個(gè) 0 這個(gè)時(shí)候我們就需要在這一個(gè)特殊的范圍內(nèi)進(jìn)行查找我們符合我們要求的數(shù)字。

管道符號(hào)它是隔開多個(gè)正則來表示滿足其中任意一個(gè)就行,比如 ab|bc 它能匹配上 ab 也能匹配上 bc;中括號(hào)它可以代表多選一可以表示中括號(hào)里面任意單個(gè)字符,所以任意的元音字母我們就可以用 [aeiou] 來表示;另外中括號(hào)中我們可以用 - 來表示范圍比如說 [a-z] 可以表示所有的小寫字母;如果中括號(hào)中的第一個(gè)是脫字符(^)它可以表示非,那么就表示不能出現(xiàn)里面的任何一個(gè)單個(gè)元素。

知道了這些我們就可以輕松搞定前面的問題,手機(jī)號(hào)的匹配可以這樣優(yōu)化第二位可能 是3~9 那么我們可以寫成 [3456789] 或者寫成中 [3-9 或者是我們用 [^012] 也就是說把 012 排除掉。

邊界原字符

前面我們學(xué)習(xí)了如何匹配文本中包含的內(nèi)容,但是有時(shí)候我們除了要找出符合某種組成規(guī)則的字符外還對(duì)匹配到的文本的位置有要求,比如說某個(gè)日志文件我們需要找出每行以時(shí)間開頭的日志。這里要使用的正則不僅要滿足時(shí)間的格式要求,它還要滿足匹配道美行的開頭才行,這時(shí)我們就需要用到邊界相關(guān)的原字符了。

和剛才說到的中括號(hào)中的脫字符不同,如果正則中開始是脫字符,它表示每行開頭的部分只有滿足正則的規(guī)則的前提下才能夠匹配上;類似的正則中有美元的符號(hào) $ 表示匹配行的結(jié)束;而 \b 來表示匹配的單詞的邊界;\A 和 \Z 它匹配整個(gè)字符串的開始和結(jié)束而不是每行的首尾;與 \A 不同的是脫字符可以匹配任意行的開頭而不是整個(gè)文本的開頭。

貪婪和非貪婪

接著我們來看一下正則中的貪婪與非貪婪,正則表達(dá)式中表示次數(shù)的量詞默認(rèn)是貪心的;也就是說它盡可能的多的去匹配符合要求的內(nèi)容 ,舉個(gè)例子來說我們要找出引號(hào)里面的單詞;可能很多同學(xué)很容易寫出 .+ 這樣的正則。

但這樣對(duì)嗎?如果有多個(gè)雙引號(hào)的時(shí)候是不會(huì)正常工作的,因?yàn)楸硎敬螖?shù)的量詞默認(rèn)是貪心的,它要盡可能多的去匹配符合要求的內(nèi)容 ,不過想要讓它變成非貪婪也很容易我們只需要在量詞后面加上問號(hào)就可以了。

從示例中可以看出對(duì)比上的差異左右的文本是一樣的,其中有兩對(duì)雙引號(hào)不同之處在于,圖的左邊不加問號(hào)時(shí)是貪婪匹配,可以看到匹配上了第一個(gè)引號(hào)到最后一個(gè)引號(hào)之間的所有的內(nèi)容;而右邊這個(gè)圖它表示 1 到多次,加號(hào)后面有一個(gè)問號(hào),結(jié)果就找到了符合要求的并且長(zhǎng)度是最短的,這就是進(jìn)行了非貪婪的匹配。

環(huán)視

當(dāng)我們對(duì)想要的提取的字符串的左邊或者是右邊的環(huán)境有要求的時(shí)候,比如說我們要查找左邊是數(shù)字的字母,這個(gè)時(shí)候我們需要用到正則的環(huán)視,簡(jiǎn)單的說環(huán)視就是在我們給定的規(guī)則前或者是規(guī)則后來加一些限制。

下圖就是利用環(huán)視來提取出左邊是標(biāo)簽右邊是標(biāo)簽的字符。

子組

們?cè)賮砹私庖幌抡齽t中的子組,它的功能是將正則分成若干個(gè)小組用擴(kuò)號(hào)來擴(kuò)起來,那么將正則保存成一個(gè)子組。子組可以用來表示某個(gè)部分的內(nèi)容在后面重復(fù)出現(xiàn)或者是對(duì)某個(gè)部分的內(nèi)容進(jìn)行替換。另外,正則匹配的時(shí)候我們還可以指定 flag,比如用點(diǎn)可以匹配所有字符,包括換行多行的匹配模式或者是大小寫不敏感的匹配模式。

案例實(shí)踐

我們回到今天開頭提出的問題也就是如何將文本中重復(fù)出現(xiàn)的單詞替換成單個(gè)單詞。在這里我們可以分成兩步來操作,首先我們需要查找出相關(guān)的內(nèi)容然后再對(duì)其進(jìn)行替換。

我們來先看一下查找部分,我們可以簡(jiǎn)單的用 w+ 來表示一個(gè)單詞,把它用擴(kuò)號(hào)擴(kuò)起來意思就是保存成了一個(gè)子組;這是我們寫正則中的第一個(gè)子組。然后我們?cè)诳崭裰笥?nbsp;\1,它的意思就是前面的子組再重復(fù)出現(xiàn)一次,這樣的話我們就找到了前面出現(xiàn)的單詞后面又再重復(fù)出現(xiàn)一次相鄰的兩個(gè)單詞。

在替換部分我們使用 \1 來表示正則中第一個(gè)子組,也就是說找到的是什么單詞我們這里就把它替換成什么單詞;然后可以看到最終的結(jié)果那里 cat 和 the 重復(fù)的已經(jīng)移除。這樣的話我們就完成了移除重復(fù)單詞的工作,到這里我們就解決了開頭我們提出的問題。

那么除了工作中我們能使用到正則在生活中其實(shí)我們也可以用正則來做一些非常有趣的事情,這里我引入一個(gè)案例比如說我們來用正則來幫助我們下載電視劇。用正則來提取出電視劇對(duì)應(yīng)的網(wǎng)址,首先我們可以使用 chrome 或者 firefox 等瀏覽器在百度中搜索相應(yīng)的電視劇的名字。

然后我們單擊右鍵審核元素或者檢查,然后獲取到每一集電視劇的鏈接的 html 代碼,接下來通過找出規(guī)律我們就可以寫出一個(gè)能匹配上所有電視劇網(wǎng)址的這樣的正則,然后可以點(diǎn)擊查找所有。

最后把查找的內(nèi)容剪切出來,把剪切出來的內(nèi)容粘貼到一個(gè)新的地方,通過替換等方式我們可以在這些網(wǎng)址的開頭都加上 you-get 命令

u-get 命令它是一個(gè)資源下載的工具,這個(gè)工具需要自己去安裝才可以使用,最后我們?cè)?nbsp;sell 上執(zhí)行這些命令就可以下載這部電視劇了。

總結(jié)

最后我來給你總結(jié)一下,正則表達(dá)式中原字符的分類記憶,大家可以在腦海中回憶一下,基礎(chǔ)常用的、空白符、范圍、邊界、量詞等;子組則是將一個(gè)正則中的部分內(nèi)容進(jìn)行分組常常用于內(nèi)容的替換;而貪婪和非貪婪其實(shí)就是量詞后面添加問號(hào),去改變匹配次數(shù)的偏好;環(huán)視則是限制匹配內(nèi)容之前或之后要符合某個(gè)規(guī)則。

今天通過大量的示例讓你加強(qiáng)了對(duì)正則各類原字符,貪婪與非貪婪,環(huán)視等方面的理解,掌握了這些內(nèi)容相信你就能夠掌握日常工作中的一些基本使用了。這里給大家推薦一個(gè)網(wǎng)站 https://regex101.com/ 這個(gè)網(wǎng)站是學(xué)習(xí)正則非常棒的一個(gè)工具感興趣可以進(jìn)一步的了解一下。


該文章在 2024/1/24 23:04:12 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved