Java 正規表示式匹配模式(貪婪型、勉強型、佔有型)
Greediness(貪婪型):最大匹配
X?、X*、X+、X{n,} 是最大匹配。例如你要用 “<.+>” 去匹配 “a<tr>aava </tr>abb”,也許你所期待的結果是想匹配 “<tr>”,但是實際結果卻會匹配到 “<tr>aava </tr>。
在 Greediness 的模式下,會盡量大範圍的匹配,直到匹配了整個內容,這時發現匹配不能成功時,開始回退縮小匹配範圍,直到匹配成功
String test = "a<tr>aava </tr>abb "; String reg = "<.+>"; System.out.println(test.replaceAll(reg, "###"));
輸出:a###abb
Reluctant(Laziness)(勉強型):最小匹配
X??、X*?、X+?、X{n,}? 是最小匹配,其實X{n,m}?和X{n }?有些多餘。在 Greediness 模式之後新增 ? 就成最小匹配。
在 Reluctant 的模式下,只要匹配成功,就不再繼續嘗試匹配更大範圍的內容
String test = "a<tr>aava </tr>abb "; String reg = "<.+?>"; System.out.println(test.replaceAll(reg, "###"));
輸出:a###aava ###abb
與 Greediness 不同,Reluctant 模式下匹配了兩次內容
Possessive(佔有型):完全匹配
X?+、X*+、X++、X{n,}+ 是完全匹配,在 Greediness 模式之後新增 + 就成完全匹配。
Possessive 模式與 Greediness 有一定的相似性,那就是都儘量匹配最大範圍的內容,直到內容結束,但與 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70015105/viewspace-2871376/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JAVA 正規表示式的三種模式: 貪婪, 勉強和佔有的討論Java模式
- 正規表示式 貪婪模式模式
- 正規表示式:貪婪模式與非貪婪模式模式
- 11.一個正規表示式案例讓你馬上明白貪婪匹配與禁止貪婪! 超級實用!
- 正規表示式支配匹配模式模式
- 正規表示式匹配
- 正規表示式匹配原理
- 字串——正規表示式匹配字串
- python 正規表示式匹配Python
- 正規表示式 多行匹配
- 匹配字母正規表示式
- leetcode - 正規表示式匹配LeetCode
- 非貪婪匹配
- 匹配正整數正規表示式
- PostgreSQL中的模式匹配和正規表示式 - DasSQL模式
- JavaScript匹配中文正規表示式JavaScript
- 匹配護照正規表示式
- 匹配小數正規表示式
- 匹配負數正規表示式
- 匹配整數正規表示式
- 匹配自然數正規表示式
- 匹配航班號正規表示式
- 正規表示式匹配漢字
- 10. 正規表示式匹配
- 正規表示式的多行匹配
- 正規表示式匹配問題
- 正規表示式匹配${key}並在Java中使用Java
- JavaScript權威指南(10)——正規表示式的模式匹配JavaScript模式
- 正規表示式全域性匹配模式(g修飾符)模式
- Python 正則是否存在前向貪婪匹配呢?Python
- 正規表示式同時匹配中英文及常用正規表示式
- 轉|正規表示式之匹配中文
- 匹配浮點數正規表示式
- 匹配二級域名正規表示式
- 匹配車牌號正規表示式
- 匹配純數字正規表示式
- 匹配html標籤正規表示式HTML
- 匹配400電話正規表示式