Pattern pattern=Pattern.compile(".+?(?<=\\d{2})");
        String str="abc57ab785bv55555";
        Matcher matcher=pattern.matcher(str);
        
        while(matcher.find())
        {
            System.out.println(matcher.group());
        }结果:
abc57
ab78
5
bv55
5
5
5
====================================================================
        Pattern pattern=Pattern.compile(".+?(?=\\d{2})");
        String str="abc57ab785bv55555";
        Matcher matcher=pattern.matcher(str);
        
        while(matcher.find())
        {
            System.out.println(matcher.group());
        }
结果:
abc
57ab
7
85bv
5
5
5我一直分不清这些预搜索
谁给我讲讲这样写有什么区别?
我只能分清把(?<=) 这样的放在左边  (?=) 这样的放在右边
可是现在是把(?<=)放在了右边我就分不清了 谢谢回答!

解决方案 »

  1.   

    Pattern pattern = Pattern.compile(".+?(?<=\\d{2})");
    String str = "abc57ab344bv22222";
    Matcher matcher= pattern.matcher(str)
    while(matcher.find())
    {System.out.println(matcher.group());}
      

  2.   

    其实可以不用管.+?,只要知道是非贪婪匹配就好了
    ".+?(?<=\\d{2})"
    你只要找到有两个数字就可以了,记住预搜索本身是不在匹配序列里面的
    "abc57ab785bv55555"
    找到数字57,所以abc57能匹配。.+?是abc57,预搜索能找到57
    找到数字78,所以ab78能匹配,.+?匹配ab78,预搜索能找到78
    注意,数字85也是能匹配的,因为是预搜索,所以不用考虑8是否已经在前面匹配了,所以这里只是输出5,.+?是5,反向于搜索能找到85,不要认为是从5开始就行了,这就是预搜索
    下面的类似,所以有很多单个的5,其实预搜索是搜到两个5的,前面的一个5已经匹配了,所以下一个只输出一个5