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模式
- 正規表示式 貪婪模式模式
- 正規表示式:貪婪模式與非貪婪模式模式
- 正規表示式貪婪模式與非貪婪模式模式
- 【正規表示式系列】貪婪與非貪婪模式模式
- 正規表示式匹配各種型別數字型別
- 常用正規表示式匹配模式(java)模式Java
- 11.一個正規表示式案例讓你馬上明白貪婪匹配與禁止貪婪! 超級實用!
- 正規表示式支配匹配模式模式
- 模式匹配與正規表示式模式
- javascript型別系統——正規表示式RegExp型別JavaScript型別
- 圖片格式型別驗證正規表示式型別
- PHP中的正規表示式及模式匹配PHP模式
- 正規表示式匹配原理
- [譯]正規表示式匹配
- 字串——正規表示式匹配字串
- iOS正規表示式匹配iOS
- PostgreSQL中的模式匹配和正規表示式 - DasSQL模式
- 轉:正規表示式判斷號碼靚號型別型別
- JavaScript匹配中文正規表示式JavaScript
- Swift 正規表示式匹配NSRegularExpressionSwiftExpress
- python 正規表示式匹配Python
- 正規表示式匹配${key}並在Java中使用Java
- JavaScript權威指南(10)——正規表示式的模式匹配JavaScript模式
- 正規表示式全域性匹配模式(g修飾符)模式
- 淺析正規表示式模式匹配的 String 方法模式
- 匹配html標籤正規表示式HTML
- 匹配空白字元正規表示式字元
- 匹配 XML 檔案正規表示式XML
- 匹配 HTML 標籤正規表示式HTML
- leetcode - 正規表示式匹配LeetCode
- 匹配空行正規表示式程式碼
- JavaScript匹配註釋正規表示式JavaScript
- Python 正則是否存在前向貪婪匹配呢?Python
- [JavaScript] 正規表示式單次匹配與多次匹配JavaScript
- java正規表示式Java
- 【java】正規表示式Java
- 正規表示式(java)Java