Java 正則表達(dá)式匹配模式(貪婪型、勉強(qiáng)型、占有型)
Greediness(貪婪型):最大匹配
X?、X*、X+、X{n,} 是最大匹配。例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也許你所期待的結(jié)果是想匹配 “<tr>”,但是實(shí)際結(jié)果卻會(huì)匹配到 “<tr>aava </tr>。
在 Greediness 的模式下,會(huì)盡量大范圍的匹配,直到匹配了整個(gè)內(nèi)容,這時(shí)發(fā)現(xiàn)匹配不能成功時(shí),開始回退縮小匹配范圍,直到匹配成功
String test = "a<tr>aava </tr>abb "; String reg = "<.+>"; System.out.println(test.replaceAll(reg, "###"));
輸出:a###abb
Reluctant(Laziness)(勉強(qiáng)型):最小匹配
X??、X*?、X+?、X{n,}? 是最小匹配,其實(shí)X{n,m}?和X{n }?有些多余。在 Greediness 模式之后添加 ? 就成最小匹配。
在 Reluctant 的模式下,只要匹配成功,就不再繼續(xù)嘗試匹配更大范圍的內(nèi)容
String test = "a<tr>aava </tr>abb "; String reg = "<.+?>"; System.out.println(test.replaceAll(reg, "###"));
輸出:a###aava ###abb
與 Greediness 不同,Reluctant 模式下匹配了兩次內(nèi)容
Possessive(占有型):完全匹配
X?+、X*+、X++、X{n,}+ 是完全匹配,在 Greediness 模式之后添加 + 就成完全匹配。
Possessive 模式與 Greediness 有一定的相似性,那就是都盡量匹配最大范圍的內(nèi)容,直到內(nèi)容結(jié)束,但與 Greediness 不同的是,完全匹配不再回退嘗試匹配更小的范圍。
String test = "a<tr>aava </tr>abb "; String reg = "<.++>"; String test2 = "<tr>"; String reg2 = "<tr>"; System.out.println(test.replaceAll(reg, "###")); System.out.println(test2.replaceAll(reg2, "###"));
輸出:a<tr>aava </tr>abb
相關(guān)文章
javascript RegExp對(duì)象(正則表達(dá)式)
JavaScript提供了一個(gè)RegExp對(duì)象來完成有關(guān)正則表達(dá)式的操作和功能,每一條正則表達(dá)式模式對(duì)應(yīng)一個(gè)RegExp實(shí)例。有兩種方式可以創(chuàng)建RegExp對(duì)象的實(shí)例。2009-05-05js使用正則子表達(dá)式匹配首字母與尾字母相同單詞的方法
這篇文章主要介紹了js使用正則子表達(dá)式匹配首字母與尾字母相同單詞的方法,可實(shí)現(xiàn)將多行文本框中首位字母相同的單詞進(jìn)行匹配的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01PHP 正則表達(dá)式常用函數(shù)使用小結(jié)
學(xué)習(xí)php正則的朋友不得不了解的一些函數(shù),大家看了下面的文章就知道了php下正則表達(dá)式的調(diào)用方法。2009-09-09Java用正則對(duì)字符串進(jìn)行處理并判斷是否能轉(zhuǎn)為數(shù)字
這篇文章主要介紹了Java用正則對(duì)字符串進(jìn)行處理并判斷是否能轉(zhuǎn)為數(shù)字的實(shí)例代碼,代碼很簡單,需要的朋友可以參考下2018-06-06