一個提高效率的工具,正則表示式,值得學習一下

簡介

正則表示式

,又稱規則表示式,通常被用來檢索、替換那些符合某個模式(規則)的文字。

許多程式設計語言都支援利用正則表示式進行字串操作。例如,在Perl中就內建了一個功能強大的正則表示式引擎。

學會使用正則表示式可以極大提高我們文字處理效率,並且各大作業系統、程式語言、文字編輯器都已經支援正則表示式

線上正則測試工具:https://regex101。com/r/PnzZ4k/1

下面的例子我會使用

Sublime Text

(對了,這個工具也非常好用)實現

元字元

一般普通字元表示的還是原來的意思,比如字元 e

舉例:

一個提高效率的工具,正則表示式,值得學習一下

所謂元字元(Metacharacter)就是指那些在正則表示式中具有特殊意義的專用字元

一個提高效率的工具,正則表示式,值得學習一下

特殊單字元

一個提高效率的工具,正則表示式,值得學習一下

舉例1:

一個提高效率的工具,正則表示式,值得學習一下

舉例2:

一個提高效率的工具,正則表示式,值得學習一下

空白符

一個提高效率的工具,正則表示式,值得學習一下

舉例:

s

能匹配上各種空白符號,也可以匹配上空格

一個提高效率的工具,正則表示式,值得學習一下

量詞

一個提高效率的工具,正則表示式,值得學習一下

舉例1:

一個提高效率的工具,正則表示式,值得學習一下

舉例2:

一個提高效率的工具,正則表示式,值得學習一下

範圍

一個提高效率的工具,正則表示式,值得學習一下

舉例:

一個提高效率的工具,正則表示式,值得學習一下

貪婪、非貪婪與獨佔

正則有三種模式:貪婪匹配、非貪婪匹配和獨佔模式

貪婪匹配:在正則中,表示次數的量詞預設是貪婪的,在貪婪模式下,會嘗試儘可能最大長度去匹配。

非貪婪匹配:找出長度最小且滿足要求的,量詞後面要加上英文的問號(

),正則就變成了

a*?

舉個例子1:

一個提高效率的工具,正則表示式,值得學習一下

匹配結果是:“aaa”,“”

為什麼會匹配到空字串?

因為星號(*)代表0到多次。

舉個例子2:

一個提高效率的工具,正則表示式,值得學習一下

一個提高效率的工具,正則表示式,值得學習一下

獨佔模式:

不管是貪婪模式,還是非貪婪模式,都需要發生回溯才能完成相應的功能。

但是在一些場景下,我們不需要回溯,匹配不上返回失敗就好了,因此正則中還有另外一種模式,獨佔模式,它類似貪婪匹配,但匹配過程不會發生

回溯

,因此在一些場合下效能會更好。

什麼是回溯?

例如下面的正則:

regex = “xy{1,3}z”

text = “xyyz”

在匹配時,y{1,3}會盡可能長地去匹配,當匹配完 xyy 後,由於 y 要儘可能匹配最長,即三個,但字串中後面是個 z 就會導致匹配不上,這時候正則就會

向前回溯

,吐出當前字元 z,接著用正則中的 z 去匹配

一個提高效率的工具,正則表示式,值得學習一下

分組與引用

舉個例子:

假設我們現在要去查詢15位或18位數字。

根據前面學習的知識,使用量詞可以表示出現次數,使用管道符號可以表示多個選擇,你應該很快就能寫出d15}d{18。

但經過測試,你會發現,這個正則並不能很好地完成任務,因為18位數字也會匹配上前15位

一個提高效率的工具,正則表示式,值得學習一下

沒有匹配到18位的記錄

解決方式

可以用括號括起來表示一個整體

一個提高效率的工具,正則表示式,值得學習一下

替換舉例

一個提高效率的工具,正則表示式,值得學習一下

替換後:

匹配模式

常見的匹配模式有4種,分別是不區分大小寫模式、點號通配模式、多行模式和註釋模式

不區分大小寫模式

一個提高效率的工具,正則表示式,值得學習一下

**使用模式修飾符:**放在整個正則前面時,表示匹配模式

一個提高效率的工具,正則表示式,值得學習一下

點號通配模式

點號它可以匹配上任何符號,但不能匹配換行,如何匹配真正的“任意”符號

一個提高效率的工具,正則表示式,值得學習一下

多行匹配模式

多行模式的作用在於,使 ^ 和 $ 能匹配上

每行

的開頭或結尾,我們可以使用模式修飾符號 (?m) 來指定這個模式

一個提高效率的工具,正則表示式,值得學習一下

註釋模式

為正則添加註釋

斷言

斷言是指對匹配到的文字位置有要求。

透過一些例子來講解。

你應該知道 d{11} 能匹配上11位數字,但這11位數字可能是18位身份證號中的一部分。再比如,去查詢一個單詞,我們要查詢 tom,但其它的單詞,比如 tomorrow 中也包含了tom

一個提高效率的工具,正則表示式,值得學習一下

單詞邊界

一個提高效率的工具,正則表示式,值得學習一下

環視

舉例郵政編碼的判斷:6位數字,且左邊不是數字,右邊不是數字

一個提高效率的工具,正則表示式,值得學習一下

原文連結:https://mp。weixin。qq。com/s/bx1Bp4LRBtpJdtGXLJOOGA

作者:月伴飛魚