国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

實例解析Java程序中正則表達式的貪婪模式匹配

2019-11-26 14:21:20
字體:
來源:轉載
供稿:網友

貪婪模式(Greedy):

數量表示符默認采用貪婪模式,除非另有表示。貪婪模式的表達式會一直匹配下去,直到無法匹配為止。如果你發現表達式匹配的結果與預期的不符,很有可能是因為――你以為表達式只會匹配前面幾個字符,而實際上它是貪婪模式,所以會一直匹配下去。
貪婪與非貪婪,加上?為非貪婪:

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 正則表達式默認用的是greedy貪婪匹配模式既是這種類型(.*)的最長匹配,如果需要最短匹配則改為(.*?)即是勉強匹配模式。
原理分析:
如果是貪婪匹配模式,正則表達式引擎會一直匹配到字符串最后,當匹配為false時,通過
回溯的方式,倒退找到倒數第一個匹配位置,返回匹配結果
如果是勉強匹配模式,正則表達式引擎會匹配到符合pattern的末尾位置那個字符,然后再往后走一步,發現匹配為false,又回溯到找到回退的最近一個匹配為true的位置,返回結果。
看代碼:
例一:

  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"eeeaaa@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"eeeaaa@ccc@eee

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏山县| 石河子市| 且末县| 潜山县| 诸城市| 江达县| 迭部县| 鲁山县| 西贡区| 尤溪县| 陵川县| 乐清市| 确山县| 盐城市| 郎溪县| 宜城市| 吴桥县| 扶余县| 周宁县| 仪陇县| 栾川县| 修武县| 方正县| 武安市| 广州市| 布尔津县| 南江县| 武威市| 高雄县| 江华| 丹巴县| 从化市| 卫辉市| 永和县| 勐海县| 广德县| 天柱县| 梨树县| 辽中县| 文山县| 霍州市|