本帖最后由 lpy3654321 于 2012-03-18 02:00:56 编辑

解决方案 »

  1.   

    你要的效果        String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";
            Pattern p = Pattern.compile("1[358]\\d{9}");
            Matcher m = p.matcher(str);        
            while(m.find()){
                System.out.println(m.group());
                m.find();
           }
      

  2.   

    问题一:groupCount指的是一次匹配中捕获组的个数,你的正则中又没有捕获组,当然是0了问题二:因为前面的if(m.find())已经把第一个匹配结果取到了,你在while(m.find())时,实际上已经是从第二个匹配开始循环了,你把上面的if(m.find())注释掉就能看到了另外,你写的手机的正则是错的
      

  3.   

    这个正则是在我一个PDF上弄下来了。 
      

  4.   


    String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";
            Pattern p7 = Pattern.compile("1[358]\\d{9}");
            Matcher m7 = p7.matcher(str);
            int count = 1;
            while(m7.find()){
                System.out.println("第"+(count++)+"个"+m7.group());
               // m7.find();
           }
            System.out.println("共"+(count-1)+"个");
      

  5.   

    你数数左括号有几个就行了,不过得把左括号后面带问号“(?”这种给排除掉
    比如:(abc(def)g(hi)jk)lmn(op(?:qrst)uvwx)yz这里会有 4 个捕获组
      

  6.   

    捕获组不是给你用来输出第几个的,呵呵,如果要按你的要求来的话,得这样做,但这样做没有任何意义!import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class RegexTest {    public static void main(String[] args) {        String str = "15812345131s15812345672a15812345133s15812345674a" +
             "15812345135s15812345676as13312345644";        String regex = "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
                    "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
                    "(1[3458][0-9]{9}).*(1[3458][0-9]{9}).*" +
                    "(1[3458][0-9]{9}).*";        Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            System.out.println("groupCount: " + matcher.groupCount());
            int count = matcher.groupCount();
            while (matcher.find()) {
                for (int i = 1; i <= count; i++) {
                    if (matcher.start(i) > -1) {
                        System.out.println("group " + i + ": " + matcher.group(i));
                    }
                }
            }
        }
    }
      

  7.   


    真是无语了,2楼给你的代码,难道就不能自己去输出看下结果吗String str = "15812345131s15812345672a15812345133s15812345674a15812345135s15812345676a";
    Pattern p = Pattern.compile("1[358]\\d{9}");
    Matcher m = p.matcher(str);        
    while(m.find()){
        System.out.println(m.group());
        m.find();
    }
    /*-----输出-----
    15812345131
    15812345133
    15812345135
    */
    看尾号,这难道不是你要的效果吗你的需求和捕获没半毛钱关系,为什么非要纠结于groupCount是多少呢