欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)例解析Java程序中正則表達(dá)式的貪婪模式匹配

 更新時(shí)間:2016年05月11日 17:45:39   作者:chaofanwei  
貪婪模式又叫最大匹配,X?、X*、X+、X{n,}都是最大匹配,例如你要用“<.+>”去匹配“a<tr>aava </tr>abb”,也許你所期待的結(jié)果是想匹配“<tr>”,但是實(shí)際結(jié)果卻會(huì)匹配到“<tr>aava </tr>”,下面我們就來(lái)看具體看一下貪婪模式的使用.

貪婪模式(Greedy):

數(shù)量表示符默認(rèn)采用貪婪模式,除非另有表示。貪婪模式的表達(dá)式會(huì)一直匹配下去,直到無(wú)法匹配為止。如果你發(fā)現(xiàn)表達(dá)式匹配的結(jié)果與預(yù)期的不符,很有可能是因?yàn)椤阋詾楸磉_(dá)式只會(huì)匹配前面幾個(gè)字符,而實(shí)際上它是貪婪模式,所以會(huì)一直匹配下去。
貪婪與非貪婪,加上?為非貪婪:

var s = '1023000'.match(/(\d+)(0*)/);
s
["1023000", "1023000", ""]

var s = '1023000'.match(/^(\d+)(0*)$/);
s
["1023000", "1023000", ""]

var s = '1023000'.match(/^(\d+?)(0*)$/);
s
["1023000", "1023", "000"]

var s = '1023000'.match(/(\d+?)(0*)/);
s
["10", "1", "0"]

java 正則表達(dá)式默認(rèn)用的是greedy貪婪匹配模式既是這種類(lèi)型(.*)的最長(zhǎng)匹配,如果需要最短匹配則改為(.*?)即是勉強(qiáng)匹配模式。
原理分析:
如果是貪婪匹配模式,正則表達(dá)式引擎會(huì)一直匹配到字符串最后,當(dāng)匹配為false時(shí),通過(guò)
回溯的方式,倒退找到倒數(shù)第一個(gè)匹配位置,返回匹配結(jié)果
如果是勉強(qiáng)匹配模式,正則表達(dá)式引擎會(huì)匹配到符合pattern的末尾位置那個(gè)字符,然后再往后走一步,發(fā)現(xiàn)匹配為false,又回溯到找到回退的最近一個(gè)匹配為true的位置,返回結(jié)果。
看代碼:
例一:

  public void test51(){ 
    String str = "aaa\"bbb\"ccc\"ddd\"eee"; 
    System.out.println(str); 
    str = str.replaceAll("\"(.*)\"", "@"); 
    System.out.println(str); 
  } 

輸出:

aaa"bbb"ccc"ddd"eee
aaa@eee

例二:

 @Test 
  public void test52(){ 
    String str = "aaa\"bbb\"ccc\"ddd\"eee"; 
    System.out.println(str); 
     
    str = str.replaceAll("\"(.*?)\"", "@"); 
    System.out.println(str); 
     
  } 

輸出:

aaa"bbb"ccc"ddd"eee
aaa@ccc@eee

相關(guān)文章

  • Java實(shí)現(xiàn)順序棧原理解析

    Java實(shí)現(xiàn)順序棧原理解析

    這篇文章主要介紹了Java實(shí)現(xiàn)順序棧原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java 中的控制反轉(zhuǎn)(IOC)詳解

    Java 中的控制反轉(zhuǎn)(IOC)詳解

    這篇文章主要介紹了理解Java 中的IOC控制反轉(zhuǎn),具有一定參考價(jià)值,需要的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • Java實(shí)例化的幾種方法總結(jié)

    Java實(shí)例化的幾種方法總結(jié)

    這篇文章主要介紹了Java實(shí)例化的幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 在Java項(xiàng)目中實(shí)現(xiàn)CI/CD持續(xù)集成與持續(xù)部署

    在Java項(xiàng)目中實(shí)現(xiàn)CI/CD持續(xù)集成與持續(xù)部署

    這篇文章主要為大家介紹了在Java項(xiàng)目中實(shí)現(xiàn)CI/CD持續(xù)集成與持續(xù)部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 一文秒懂idea的git插件跟翻譯插件

    一文秒懂idea的git插件跟翻譯插件

    idea之類(lèi)的開(kāi)發(fā)軟件真的超級(jí)多的插件,今天給大家分享idea的git插件跟翻譯插件,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • Java中的OkHttp使用教程

    Java中的OkHttp使用教程

    OkHttp是目前非?;鸬木W(wǎng)絡(luò)庫(kù),OKHttp與HttpClient類(lèi)似,也是一個(gè)Http客戶端,提供了對(duì)?HTTP/2?和?SPDY?的支持,并提供了連接池,GZIP?壓縮和?HTTP?響應(yīng)緩存功能,本文重點(diǎn)給大家介紹Java?OkHttp使用,感興趣的朋友一起看看吧
    2022-04-04
  • 使用java打印心型、圓形圖案的實(shí)現(xiàn)代碼

    使用java打印心型、圓形圖案的實(shí)現(xiàn)代碼

    這篇文章主要介紹了使用java打印心型、圓形圖案的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • java事務(wù)的概念淺析

    java事務(wù)的概念淺析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于java事務(wù)的概念淺析,有興趣的朋友們可以參考學(xué)習(xí)下。
    2020-12-12
  • 保證緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性詳解

    保證緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性詳解

    在實(shí)際開(kāi)發(fā)過(guò)程中,緩存的使用頻率是非常高的,只要使用緩存和數(shù)據(jù)庫(kù)存儲(chǔ),就難免會(huì)出現(xiàn)雙寫(xiě)時(shí)數(shù)據(jù)一致性的問(wèn)題,本文主要介紹了如何保證緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性,需要的小伙伴可以參考閱讀
    2023-04-04
  • SpringBoot EasyPoi動(dòng)態(tài)導(dǎo)入導(dǎo)出的兩種方式實(shí)現(xiàn)方法詳解

    SpringBoot EasyPoi動(dòng)態(tài)導(dǎo)入導(dǎo)出的兩種方式實(shí)現(xiàn)方法詳解

    項(xiàng)目里使用的是EasyPoi來(lái)處理導(dǎo)入導(dǎo)出功能的。近日因業(yè)務(wù)需求調(diào)整,一些導(dǎo)出功能的導(dǎo)出列需要根據(jù)不同的條件動(dòng)態(tài)導(dǎo)出
    2022-09-09

最新評(píng)論