日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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


上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

結果:匹配失敗

 

 

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

 

 

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

編程思想之正則表達式

編程思想之迭代器

編程思想之遞歸

編程思想之回調

 

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产午夜一区二区三区 | 日本一区二区不卡视频 | 国产视频在线一区二区 | 亚洲欧美一区二区三区国产精品 | 日日网站| 高清一区二区 | 嫩草国产 | 成人在线一区二区三区 | 成人精品影院 | 中文字幕亚洲精品 | 中文字幕免费av | 国产18精品 | 欧美一区二区三区四区在线观看 | 在线免费黄色 | 亚洲网站在线播放 | 成人97精品毛片免费看 | 尤物国产 | 日韩免费一级 | 日韩欧美中文 | 性国产| 精品国产一区二区三区四区四 | 日韩精品免费一区二区三区 | 久久精品国产一区 | 亚洲一区二区高潮无套美女 | 超碰老女人 | 亚洲国产视频一区 | 国产精品久久久久久久久久久久冷 | 福利二区| 午夜精品福利视频 | 国产精品国产成人国产三级 | 欧美黄色aa| 91免费视频观看 | 久久久4久久久久8久久久久久 | 婷婷激情五月 | 夜夜操导航 | 久久综合热 | 国内 美女 主播 精品 视频 | 福利久久| 欧美最猛性xxxx | 不卡一二三区 | 一级少妇女片 |