程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java 正則表達式 量詞 --- 三種匹配模式【貪婪型、勉強型、占有型】

Java 正則表達式 量詞 --- 三種匹配模式【貪婪型、勉強型、占有型】

編輯:JAVA編程入門知識

1、Greediness(貪婪型):最大匹配
X?、X*、X+、X{n,}都是最大匹配。例如你要用“<.+>”去匹配“a<tr>aava</tr>abb”,也許你所期待的結果是想匹配“<tr>”,但是實際結果卻會匹配到“<tr>aava</tr>”。這是為什麼呢?下面我們跟蹤下最大匹配的匹配過程。
①“<”匹配字符串的“<”。②“.+”匹配字符串的“tr>aava</tr>ab”,在進行最大匹配時,它把兩個“>”都匹配了,它匹配了所有字符,直到文本的最後字符“b”③這時,發現不能成功匹配“>”,開始按原路回退,用“a”與“>”匹配,直到“ab”前面的“>”匹配成功。
2、Reluctant(Laziness)(勉強型):最小匹配
     X?、X*、X+、X{n,}都是最大匹配。好,加個?就成了Laziness匹配。例如X??、X*?、X+?、X{n,}?都是最小匹配,其實X{n,m}?和X{n }?有些多余。
最小匹配意味者,.+? 匹配一個字符後,馬上試一試>的匹配可能,失敗了,則.+?再匹配一個字符,再馬上試一試>的匹配可能。JDK文檔中Greedy 和Reluctant,它是以eat一口來隱喻的,所以翻譯成貪吃和(勉強的)厭食最貼切了。不過我喜歡最大匹配、最小匹配的說法。
3、Possessive(占有型):完全匹配

與最大匹配不同,還有一種匹配形式:X?+、X*+、X++、X{n,}+等,成為完全匹配。它和最大匹配一樣,一直匹配所有的字符,直到文本的最後,但它不由原路返回。也就是說,一口匹配,搞不定就算了,到也干脆,偶喜歡。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved