實例解析Java法式中正則表達式的貪心形式婚配。本站提示廣大學習愛好者:(實例解析Java法式中正則表達式的貪心形式婚配)文章只能為提供參考,不一定能成為您想要的結果。以下是實例解析Java法式中正則表達式的貪心形式婚配正文
貪心形式(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"eee aaa@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"eee aaa@ccc@eee