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