一文搞懂正則表達(dá)式
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在日常的開(kāi)發(fā)工作中,正則表達(dá)式猶如空氣般無(wú)所不在,扮演著不可或缺的角色。我們時(shí)常依賴(lài)正則來(lái)解決各類(lèi)問(wèn)題,例如精準(zhǔn)定位符合特定規(guī)則的文本。然而,我注意到許多開(kāi)發(fā)者對(duì)正則持有“復(fù)雜難記”的觀念,難以全面掌握這一強(qiáng)大的工具,以至于每當(dāng)在實(shí)際工作中遇到需要運(yùn)用正則表達(dá)式的情況時(shí),往往不得不翻閱資料才能編寫(xiě)出合適的正則。 正則表達(dá)式作為一種無(wú)比強(qiáng)大的工具,無(wú)疑值得我們?cè)陂_(kāi)發(fā)過(guò)程中深入學(xué)習(xí)并熟練運(yùn)用。它能幫助我們高效解決各類(lèi)復(fù)雜問(wèn)題,顯著提升工作效率,從而讓我們的編程之旅更加得心應(yīng)手,游刃有余。 什么是正則表達(dá)式你可以這樣來(lái)理解正則是一個(gè)非常強(qiáng)大的文本處理工具,我們可以利用它來(lái)教驗(yàn)數(shù)據(jù)的有效性,比如用戶輸入的手機(jī)號(hào)是不是符合規(guī)則;另外,也可以用正則從文本中提取需要的內(nèi)容,比如從網(wǎng)頁(yè)中抽取我們需要的數(shù)據(jù);此外,正則還可以用來(lái)做文本內(nèi)容的替換從而得到我們想要的內(nèi)容,可以說(shuō)正則已經(jīng)滲透到了我們?nèi)粘9ぷ鞯姆椒矫婷?,不難發(fā)現(xiàn)學(xué)習(xí)并利用好正則至關(guān)重要。 怎么理解正則表達(dá)式呢?簡(jiǎn)單來(lái)說(shuō)它就是描述字符串的規(guī)則,最簡(jiǎn)單的正則就是單個(gè)的普通字符,比如字 除了剛剛說(shuō)的普通的字符串的查找之外,有時(shí)候我們還需要查找符合某個(gè)規(guī)則的文本;比如我們想找出字符串中所有的數(shù)字,而任意數(shù)字在正則中可以用 單個(gè)的 正則不僅僅能找出符合要求的文本,還可以對(duì)文本進(jìn)行替換。比如說(shuō)我們有這樣一段文本 原字符正則表達(dá)式中其實(shí)有很多的原字符,比如 我們可以把原字符大概的分成這么幾類(lèi),有基礎(chǔ)常用的、特殊的空白符、表示某個(gè)范圍的、表示邊界的、表示次數(shù)的量詞;原字符雖然非常的多但如果我們按照分類(lèi)去理解記憶,效果就會(huì)好很多。接下來(lái)我們就按照前面說(shuō)的原字符的分類(lèi)來(lái)逐一的進(jìn)行講解。 基礎(chǔ)的原字符首先非常常用的基礎(chǔ)的原字符,比如英文的點(diǎn)它表示換行以外的任意字符, 特殊的空白符接著我們來(lái)看一下空白符有哪些,其實(shí)我們?cè)诰幊讨薪?jīng)常會(huì)遇到比如說(shuō)換行符 表示數(shù)量的原字符剛剛我們說(shuō)到的基礎(chǔ)的原字符也好,空白符也好,它們都只能匹配單個(gè)字符比如說(shuō) 在正則中英文的 就比如說(shuō)由于業(yè)務(wù)需要我們?cè)谌罩浦刑砑恿?user 這樣一個(gè)字段,但舊日志可能是沒(méi)有這個(gè)字段的;這個(gè)時(shí)候我們可以使用 范圍原字符學(xué)習(xí)到了量詞我們就可以使用 管道符號(hào)它是隔開(kāi)多個(gè)正則來(lái)表示滿足其中任意一個(gè)就行,比如 知道了這些我們就可以輕松搞定前面的問(wèn)題,手機(jī)號(hào)的匹配可以這樣優(yōu)化第二位可能 邊界原字符前面我們學(xué)習(xí)了如何匹配文本中包含的內(nèi)容,但是有時(shí)候我們除了要找出符合某種組成規(guī)則的字符外還對(duì)匹配到的文本的位置有要求,比如說(shuō)某個(gè)日志文件我們需要找出每行以時(shí)間開(kāi)頭的日志。這里要使用的正則不僅要滿足時(shí)間的格式要求,它還要滿足匹配道美行的開(kāi)頭才行,這時(shí)我們就需要用到邊界相關(guān)的原字符了。 和剛才說(shuō)到的中括號(hào)中的脫字符不同,如果正則中開(kāi)始是脫字符,它表示每行開(kāi)頭的部分只有滿足正則的規(guī)則的前提下才能夠匹配上;類(lèi)似的正則中有美元的符號(hào) 貪婪和非貪婪接著我們來(lái)看一下正則中的貪婪與非貪婪,正則表達(dá)式中表示次數(shù)的量詞默認(rèn)是貪心的;也就是說(shuō)它盡可能的多的去匹配符合要求的內(nèi)容 ,舉個(gè)例子來(lái)說(shuō)我們要找出引號(hào)里面的單詞;可能很多同學(xué)很容易寫(xiě)出 但這樣對(duì)嗎?如果有多個(gè)雙引號(hào)的時(shí)候是不會(huì)正常工作的,因?yàn)楸硎敬螖?shù)的量詞默認(rèn)是貪心的,它要盡可能多的去匹配符合要求的內(nèi)容 ,不過(guò)想要讓它變成非貪婪也很容易我們只需要在量詞后面加上問(wèn)號(hào)就可以了。 從示例中可以看出對(duì)比上的差異左右的文本是一樣的,其中有兩對(duì)雙引號(hào)不同之處在于,圖的左邊不加問(wèn)號(hào)時(shí)是貪婪匹配,可以看到匹配上了第一個(gè)引號(hào)到最后一個(gè)引號(hào)之間的所有的內(nèi)容;而右邊這個(gè)圖它表示 1 到多次,加號(hào)后面有一個(gè)問(wèn)號(hào),結(jié)果就找到了符合要求的并且長(zhǎng)度是最短的,這就是進(jìn)行了非貪婪的匹配。 環(huán)視當(dāng)我們對(duì)想要的提取的字符串的左邊或者是右邊的環(huán)境有要求的時(shí)候,比如說(shuō)我們要查找左邊是數(shù)字的字母,這個(gè)時(shí)候我們需要用到正則的環(huán)視,簡(jiǎn)單的說(shuō)環(huán)視就是在我們給定的規(guī)則前或者是規(guī)則后來(lái)加一些限制。 下圖就是利用環(huán)視來(lái)提取出左邊是標(biāo)簽右邊是標(biāo)簽的字符。 子組們?cè)賮?lái)了解一下正則中的子組,它的功能是將正則分成若干個(gè)小組用擴(kuò)號(hào)來(lái)擴(kuò)起來(lái),那么將正則保存成一個(gè)子組。子組可以用來(lái)表示某個(gè)部分的內(nèi)容在后面重復(fù)出現(xiàn)或者是對(duì)某個(gè)部分的內(nèi)容進(jìn)行替換。另外,正則匹配的時(shí)候我們還可以指定 flag,比如用點(diǎn)可以匹配所有字符,包括換行多行的匹配模式或者是大小寫(xiě)不敏感的匹配模式。 案例實(shí)踐我們回到今天開(kāi)頭提出的問(wèn)題也就是如何將文本中重復(fù)出現(xiàn)的單詞替換成單個(gè)單詞。在這里我們可以分成兩步來(lái)操作,首先我們需要查找出相關(guān)的內(nèi)容然后再對(duì)其進(jìn)行替換。 我們來(lái)先看一下查找部分,我們可以簡(jiǎn)單的用 在替換部分我們使用 那么除了工作中我們能使用到正則在生活中其實(shí)我們也可以用正則來(lái)做一些非常有趣的事情,這里我引入一個(gè)案例比如說(shuō)我們來(lái)用正則來(lái)幫助我們下載電視劇。用正則來(lái)提取出電視劇對(duì)應(yīng)的網(wǎng)址,首先我們可以使用 然后我們單擊右鍵審核元素或者檢查,然后獲取到每一集電視劇的鏈接的 最后把查找的內(nèi)容剪切出來(lái),把剪切出來(lái)的內(nèi)容粘貼到一個(gè)新的地方,通過(guò)替換等方式我們可以在這些網(wǎng)址的開(kāi)頭都加上
總結(jié)最后我來(lái)給你總結(jié)一下,正則表達(dá)式中原字符的分類(lèi)記憶,大家可以在腦海中回憶一下,基礎(chǔ)常用的、空白符、范圍、邊界、量詞等;子組則是將一個(gè)正則中的部分內(nèi)容進(jìn)行分組常常用于內(nèi)容的替換;而貪婪和非貪婪其實(shí)就是量詞后面添加問(wèn)號(hào),去改變匹配次數(shù)的偏好;環(huán)視則是限制匹配內(nèi)容之前或之后要符合某個(gè)規(guī)則。 今天通過(guò)大量的示例讓你加強(qiáng)了對(duì)正則各類(lèi)原字符,貪婪與非貪婪,環(huán)視等方面的理解,掌握了這些內(nèi)容相信你就能夠掌握日常工作中的一些基本使用了。這里給大家推薦一個(gè)網(wǎng)站 該文章在 2024/1/24 23:04:12 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |