正則表達式入門(七)量詞


1
22
333
4444
55555
666666
7777777
88888888
999999999
0000000000

將排列成直角三角形的數字粘貼到程序中。
貪心,懶惰和占有
量詞本身是貪心的,貪心的量詞會首先匹配整個字符串。嘗試匹配時,它會選定盡可能多的內容,也就是整個輸入。量詞首次嘗試匹配整個字符串,如果失敗則回退一個字符后再嘗試,這個過程叫做回溯。它每次回退一個字符,知道找到匹配內容或者沒有字符嘗試為止。
懶惰的意思就是它從目標的起始位置開始嘗試尋找匹配,每次檢查字符串的一個字符。最后它會嘗試匹配整個字符串。要使一個量詞成為懶惰的,必須在普通量詞后添加一個問好?
占有量詞會覆蓋整個目標然后嘗試尋找匹配內容,但它只嘗試一次,不會回溯。占有量詞就是在普通量詞之后添加一個加號。

用*,+和?進行匹配
在工具中輸入

.*

它會以貪心的方式匹配文本中的所有字符。*匹配任何字符零次或多次。
貪心的量詞


匹配特定次數
使用花括號可以限制某個模式在某個范圍內匹配的次數,未修飾的量詞是貪心量詞。
例如:

7{1}

會匹配第一次出現的7,要匹配一個或多個7,只需要加一個逗號:

7{1,}

所以,7+其實和7{1,}是一樣的。
那么,7*其實和7{0,}是一樣的。
最后,7?其實和7{0,1}是一樣的
范圍語法

懶惰量詞

在工具中用?來匹配零個或一個5

5?

再加一個?使量詞編程懶惰的

5??

現在它不匹配任何內容了,因為現在的模式是懶惰的。它不會強制匹配第一個5,懶惰的基本特性就是匹配盡可能少的字符

試一下匹配零個或多個

5*?

它也不匹配任何內容,因為它選擇匹配最少的次數,零次。

試一下匹配一個或多個

5+?

它匹配了一個5,它選擇了最少的次數,一次。

使用m和n的方式也是一樣的

5{2,5}?

它將匹配2個5,而不是5個。

如果你想匹配最少而不是最多的數目,就使用懶惰量詞。

占有量詞

占有式量詞很像貪心式量詞,它會選擇盡可能多的內容,但它不回溯。它不會放棄找到的內容,它很自私。優點是速度快。

我們先匹配以零開頭的多個零,然后再匹配以零結尾的多個零。

0.*+

所有零都被標亮了。

.*+0

不匹配任何內容。因為它沒有回溯,一下子選定了所有的輸入,不再回來查看。它一下子沒有在結尾找到零,也不知該從哪里找起。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM