java - 正則捕捉中(.*?)和(.*)的區(qū)別
問題描述
Java使用正則匹配捕捉1 Pattern p = Pattern.compile('name='sign' value='(.*)'/>');2 Pattern p = Pattern.compile('name='sign' value=*'(.?)**'/>');第二個(gè)比第一個(gè)多了一個(gè)?號(hào),請(qǐng)問其中區(qū)別是什么
問題解答
回答1:貪婪和非貪婪的區(qū)別。
簡(jiǎn)單來說,非貪婪是匹配到就停,不管后面還有沒有,貪婪是只要后面還符合,就不會(huì)停。
回答2:當(dāng)正則表達(dá)式中包含能接受重復(fù)的限定符時(shí),通常的行為是(在使整個(gè)表達(dá)式能得到匹配的前提下)匹配盡可能多的字符。以這個(gè)表達(dá)式為例:a.*b,它將會(huì)匹配最長(zhǎng)的以a開始,以b結(jié)束的字符串。如果用它來搜索aabab的話,它會(huì)匹配整個(gè)字符串a(chǎn)abab。這被稱為貪婪匹配。有時(shí),我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一個(gè)問號(hào)?。這樣.*?就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)?,F(xiàn)在看看懶惰版的例子吧:a.*?b匹配最短的,以a開始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab(第一到第三個(gè)字符)和ab(第四到第五個(gè)字符)。
復(fù)制自:http://deerchao.net/tutorials... 正則表達(dá)式30分鐘入門,貪婪與懶惰部分
回答3:前者在找到一個(gè)匹配之后就會(huì)停止,而后者會(huì)找到所有匹配的目標(biāo)。
回答4:這個(gè)問題涉及正則表達(dá)式中貪婪模式與懶惰模式(也稱為非貪婪模式)首先來看看這兩個(gè)的定義
貪婪模式,最大限度匹配*,+,’{n,}’,.*都屬于貪婪模式,所謂最大限度匹配,我舉個(gè)例子
var pattern = /a.*e/console.log('abcd fsdfsdfsesfdfsdfsesdfedfsdfses'.match(pattern));//結(jié)果為abcd fsdfsdfsesfdfsdfsesdfedfsdfse
懶惰模式,在匹配成功的前提下,盡可能少的去匹配。還是上面這個(gè)例子:
var pattern = /a.*?e/console.log('abcd fsdfsdfsesfdfsdfsesdfedfsdfses'.match(pattern));//結(jié)果為abcd fsdfsdfse回答5:
?會(huì)選取最小的匹配的。
相關(guān)文章:
1. javascript - js控制元素樣式的疑惑2. css3 - 網(wǎng)站放在本地和放在遠(yuǎn)端服務(wù)器用 iPhone Safari 打開樣式不同3. javascript - node.js不同模塊之間如何傳值4. android - 哪位大神知道java后臺(tái)的api接口的對(duì)象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)5. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?6. html - 哪些情況下float會(huì)失效?7. javascript - web 移動(dòng)端瀏覽器 用js 能不做判斷當(dāng)前手機(jī)安裝沒安裝app 如果安了就去打開 沒安就去下載哇?8. css3 - text-overflow為何會(huì)在li的子標(biāo)簽a下失效9. 就一臺(tái)服務(wù)器,mysql數(shù)據(jù)庫想實(shí)現(xiàn)自動(dòng)備份,如何設(shè)計(jì)?10. [前端求職必看]前端開發(fā)面試題與答案精選_擴(kuò)展問題
