Java正則中的Greedy、Reluctant 、Possessive

來源:互聯網
上載者:User

我們平時經常使用的Regex預設情況下基本都是Greedy模式,也就是貪吃模式,java中看下錶

Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超過 m

也就是說對於 abcd123這個原始文本來說 .*3 是可以匹配的,因為點可以匹配任何字元,*表示可以匹配0次或者多次,全部吃入abcd123發現.*匹配了,但是後面有個3卻無法匹配,因此就回溯一個字元,也就是.*只匹配abcd12 剛好整個運算式可以匹配。這就是貪吃,可以回溯。

與Greedy相類似的還有一個Possessive

Possessive 數量詞
X?+ X,一次或一次也沒有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n
X{n,}+ X,至少 n
X{n,m}+ X,至少 n 次,但是不超過 m

它和greedy類似,也是全部吃入,但是唯一不同的是它不回溯,所以對於上面的abcd123這個例子,.*+3是不匹配的。

對於Reluctant 來說,就是Greedy的一個相反的匹配模式,他從左到有一個一個開始匹配,而不是整個字串一個一個回溯。

Reluctant 數量詞
X?? X,一次或一次也沒有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n
X{n,}? X,至少 n
X{n,m}? X,至少 n 次,但是不超過 m

同樣對於上面這個例子,abcd123,  用.*?3 也是匹配的,因為從左至右,一個一個看只有全部才能匹配,而對於 模式.+?來說,只匹配最左邊的a字元,如果.*?意味著沒有匹配任何字元。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.