Java正则表达式中量词贪婪型,勉强型,占有型简单描述

来源:互联网 发布:局域网屏幕监控软件 编辑:程序博客网 时间:2024/05/16 00:43

今天看《Thinking In java》正则表达式这一节量词有讲到量词特意写了一篇博客来总结。

量词的意思是:描述了一个模式吸入输入文本的方式

  • 贪婪型 :java正则表达式默认匹配是贪婪型,就是原始表达式(x?),会 为所有可能的模式发现尽可能多的匹配。
Matcher m = Pattern.compile("x+")                .matcher("xxxxxx");        if(m.find())            System.out.println(m.group());/*Oputput:xxxxxx*/
  • 勉强型 :原始表达式后边加个?号(x+?),会匹配满足模式所需的最少字符数。
Matcher m = Pattern.compile("x+?")                .matcher("xxxxxx");        if(m.find())            System.out.println(m.group());/*Output:x*/  
  • 占有型 :原始表达式后边加个+号(x++), 当正则表达式被应用于字符串时,他会产生相当多的状态,以便匹配失败时可以回溯。而“占有型”量词不会保存这些中间状态,因此他们可以防止回溯。他们常常用于防止正则表达式失败,因此可以使用正则表达式起来更加有效。
    Matcher m = Pattern.compile("\\d+\\d")     //  \\d+都匹配到了3 6 0 3,遇到空格就无法匹配了,可是后面的\\d就无法匹配了,他就回溯,最终让后一个\\d匹配3 6 0 3                .matcher("123 456 78910 111213");        while(m.find())            System.out.println(m.group());        System.out.println("----------------------------------------");        Matcher m2 = Pattern.compile("\\d++\\d")     //  但是占有型则不,它不回溯,也就一个也匹配不成了。                .matcher("123 456 78910 111213");        while(m2.find())            System.out.println(m2.group());    }/*Output:12345678910111213----------------------------------------*/  
阅读全文
0 0