多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Java正則表達中Greedy Reluctant Possessive 的區別

Java正則表達中Greedy Reluctant Possessive 的區別

來源:程序員人生   發布時間:2015-01-22 08:12:27 閱讀次數:3289次


上1篇文章《編程思想之正則表達式 》中講了正則表達式的原理、使用方法和常見的正則表達式總結,本文將進1步探討Java正則表達中GreedyReluctantPossessive3種策略的區分。

從Java的官方文檔http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中我們可以看到,正則表達式表示數量詞的符號有3套,分別是Greedy(貪婪的)Reluctant(委曲的)Possessive(獨占的)。其含義以下:

Greedy 數量詞

X?

X,1次或1次也沒有

X*

X,零次或屢次

X+

X,1次或屢次

X{n}

X,恰好 n 次

X{n,}

X,最少 n 次

X{n,m}

X,最少 n 次,但是不超過 m 次

 

 

Reluctant 數量詞

X??

X,1次或1次也沒有

X*?

X,零次或屢次

X+?

X,1次或屢次

X{n}?

X,恰好 n 次

X{n,}?

X,最少 n 次

X{n,m}?

X,最少 n 次,但是不超過 m 次

 

 

Possessive 數量詞

X?+

X,1次或1次也沒有

X*+

X,零次或屢次

X++

X,1次或屢次

X{n}+

X,恰好 n 次

X{n,}+

X,最少 n 次

X{n,m}+

X,最少 n 次,但是不超過 m 次

 

GreedyReluctantPossessive的區分

實例說話

看上面的表格我們發現這3種數量詞的含義都相同(X?X??X?+都表示1次或1次也沒有),但他們之間還是有1些細微的區分的。我們先來看1個例子:

1.Greedy

public static void testGreedy() { Pattern p = Pattern.compile(".*foo"); String strText = "xfooxxxxxxfoo"; Matcher m = p.matcher(strText); while (m.find()) { System.out.println("matched form " + m.start() + " to " + m.end()); } }
結果:

matched form 0 to 13

 

2.Reluctant

public static void testReluctant() { Pattern p = Pattern.compile(".*?foo"); String strText = "xfooxxxxxxfoo"; Matcher m = p.matcher(strText); while (m.find()) { System.out.println("matched form " + m.start() + " to " + m.end()); } }
結果:

matched form 0 to 4

matched form 4 to 13

 

 

3.Possessive

public static void testPossessive() { Pattern p = Pattern.compile(".*+foo"); String strText = "xfooxxxxxxfoo"; Matcher m = p.matcher(strText); while (m.find()) { System.out.println("matched form " + m.start() + " to " + m.end()); } }
結果:

 

//未匹配成功

 

原理講授

Greedy數量詞被稱為“貪婪的”是由于匹配器被強迫要求第1次嘗試匹配時讀入全部輸入串,如果第1次嘗試匹配失敗,則從后往前逐一字符地回退并嘗試再次匹配,直到匹配成功或沒有字符可回退。

模式串:.*foo

查找串:xfooxxxxxxfoo

結果:matched form 0 to 13

 

其比較進程以下

 


Reluctant采取與Greedy相反的方法,它從輸入串的首(字符)位置開始,在1次嘗試匹配查找中只委曲地讀1個字符,直到嘗試完全個字符串。

模式串:.*foo

查找串:xfooxxxxxxfoo

結果:matched form 0 to 4

      matched form 4 to 13

 

其比較進程以下

 

 

Possessive數量詞總是讀入全部輸入串,嘗試1次(僅且1次)匹配成功,不像GreedyPossessive從不回退,即使這樣做也可能使整體匹配成功。

模式串:.*foo

查找串:xfooxxxxxxfoo

結果:

      //未匹配成功

 

其比較進程以下

 

 

參考文章:http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

 

再來看看幾個例子:

模式串:.+[0⑼]

查找串:abcd5aabb6

結果:matched form 0 to 10

 

 

模式串:.+?[0⑼]

查找串:abcd5aabb6

結果:matched form 0 to 4

 

 

模式串:.{1,9}+[0⑼]

查找串:abcd5aabb6

結果:matched form 0 to 10

 

模式串:.{1,10}+[0⑼]

查找串:abcd5aabb6

結果:匹配失敗

 

 

如果您有甚么疑惑和想法,請在評論處給予反饋,您的反饋就是最好的測評師!由于本人技術和能力有限,如果本博文有毛病或不足的地方,敬請體諒并給出您寶貴的建議!

 

 

========================歡迎關注編程思想系列文章========================

編程思想之正則表達式

編程思想之迭代器

編程思想之遞歸

編程思想之回調

 

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久精品免费全国观看国产 | 噜噜影院无毒不卡 | 日本一级毛片片在线播放 | 亚洲国产精品成人综合久久久 | 99成人在线视频 | 最近中文字幕高清字幕在线视频 | 欧美孕交videofree巨大 | www毛片com| 亚洲国产精品乱码一区二区三区 | 2017亚洲天堂 | yellow中文字幕在线 | 精品无码久久久久久国产 | 亚洲成人91| 欧美.成人.综合在线 | 亚洲不卡一区二区三区 | 欧美一级人与动毛片免费播放 | 视频二区中文字幕 | 国产性生活视频 | xh98hx国产在线视频 | 欧美国产综合日韩一区二区 | 亚洲国产成人在线视频 | 国产综合亚洲欧美日韩一区二区 | 日本免费第一区二区三区 | 国产在线乱码在线视频 | 欧美性猛交xxxx免费看久久久 | 动漫美女口工h福利动画网站 | 日本aa在线| a视频在线| 国产欧美日韩一区 | 亚洲欧美日韩综合久久久久 | 99精品国产高清一区二区 | 91福利片 | 小说区 综合区 都市激情 | 国产福利视频一区二区三区四区 | 亚洲男人的天堂久久精品 | 中文精品久久久久中文 | 美女网站视频在线 | 亚洲精品国产一区二区三区四区 | 欧美精品亚洲精品日韩专区va | 性吧影院 | 亚欧在线观看 |