一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 實例解析Java程序中正則表達式的貪婪模式匹配

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

2020-04-27 12:39chaofanwei JAVA教程

貪婪模式又叫最大匹配,X?、X*、X+、X{n,}都是最大匹配,例如你要用“<.+>”去匹配“aaava abb”,也許你所期待的結果是想匹配“”,但是實際結果卻會匹配到“aava ”,下面我們就來看具體看一下貪婪模式的使用.

貪婪模式(Greedy):

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的位置,返回結果。
看代碼:
例一:

?
1
2
3
4
5
6
public void test51(){
  String str = "aaa\"bbb\"ccc\"ddd\"eee";
  System.out.println(str);
  str = str.replaceAll("\"(.*)\"", "@");
  System.out.println(str);
}

輸出:

?
1
2
aaa"bbb"ccc"ddd"eee
aaa@eee

例二:

?
1
2
3
4
5
6
7
8
9
@Test
 public void test52(){
   String str = "aaa\"bbb\"ccc\"ddd\"eee";
   System.out.println(str);
    
   str = str.replaceAll("\"(.*?)\"", "@");
   System.out.println(str);
    
 }

輸出:

?
1
2
aaa"bbb"ccc"ddd"eee
aaa@ccc@eee

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: sex5·性屋娱乐 | 免费看全黄特黄毛片 | 亚洲社区在线观看 | 操久久| 亚洲国产资源 | 久久久这里有精品999 | 91精品国产高清久久久久久91 | 日本精工厂网址 | 99只有精品| 涩情主播在线翻车 | 无码精品AV久久久奶水 | 好大好深好涨好烫还要 | 欧美精品亚洲精品日韩专区va | 国产亚洲精品看片在线观看 | 国产传媒天美果冻 | 97影院3 | 精品精品国产自在香蕉网 | 麻豆网| 久久性生大片免费观看性 | 欧美国产视频 | 美女光屁股网站 | 久久久久久久99精品免费观看 | 日韩无砖专区2020在线 | 亚洲天堂三区 | 狠狠婷婷综合缴情亚洲 | 视频一区国产精戏刘婷 | 国产精品亚洲va在线观看 | 亚洲欧美精品一区二区 | 国产精品调教 | 久久成人精品免费播放 | 青青国产成人久久91网 | 欧美特黄一级大片 | 亚洲精品m在线观看 | 国产在线观看福利片 | 我不卡影院手机在线观看 | 免费被靠视频动漫 | 成人免费福利网站在线看 | 国产区综合另类亚洲欧美 | 91丝袜足控免费网站xx | 日本无遮挡拍拍拍凤凰 | 99久久精品久久久久久清纯 |