//匹配以.C开头的
        Pattern p = Pattern.compile("[.C][0-9]+");//是true?
        //"[\\.C][0-9]+" 还是true;// "\\.C[0-9]+"  终于false问?为什么第2个正则 不行呢? /**
     * @param args
     */
    public static void main(String[] args)
    {       System.out.println(isMiddleStartWithDotC("C1000"));    }
    /**
     * 返回中间是否有.C的计数器
     * @param s
     * @return
     */
    public static boolean isMiddleStartWithDotC(String s)
    {        //匹配以.C开头的
        Pattern p = Pattern.compile("[.C][0-9]+");//是true?
        //"[\\.C][0-9]+" 还是true;// "\\.C[0-9]+"  终于false
        Matcher m = p.matcher(s);
        if (m.find())
        {
            return true;        }
        return false;
    }

解决方案 »

  1.   

    [.C]
    .指代任意字符,[.C]就是任意字符或者C,也就还是任意字符………………
    就是说任意字符开始
      

  2.   

    这样匹配的话,就是只要使有数字串,那就应该是true了
      

  3.   

    [\\.C]额,这个匹配是.或者C,你测试的C1000显然满足条件……
      

  4.   

    [.C];//是true?匹配任意字符
    [\\.C] 还是true; 匹配有.或C
    \\.C  终于false 匹配.C//返回中间是否有.C的计数器
    //匹配以.C开头的
    你要匹配中间有.C的还是以.C开头的啊?匹配.C开头  ^\\.C
      

  5.   

    ls这个一样回是true………………
    最正确的应该是6楼说的^\\.C
      

  6.   

    改改:System.out.println("000.Cadf".matches("^\\.C[0-9]+"));
    System.out.println(".C123".matches("^\\.C[0-9]+"));
    System.out.println("0.C123".matches("^\\.C[0-9]+"));
    System.out.println(".C124443".matches("^\\.C[0-9]+"));结果:
    false
    true
    false
    true
      

  7.   

    [.C][0-9]+这种写法是不能匹配.C开头的,在方括号[]里出现的字符是不需要转义的,也就是说早方括号里使用.?()等是没有用的,他们相当于转移后的字符,所以你的这个写法是匹配一个.或者C后面跟着若干数字的字符串
    [\\.C][0-9]+这里转义符写和不写一样,意思和上面那个相同
    \\.C[0-9]+这个不用说了
    如果匹配.C要用[]的话可以这个
    1:[.C]{2}[0-9]+
    2:[.]C[0-9]+
    3:正常写法:^\\.C\\d+$
      

  8.   

    [.C]{2}[0-9]+
    这种匹配不对 dddd..CC1000 会匹配CC1000PS:public static boolean isMiddleStartWithDotC(String s)
    直接返回
    return m.find();
      

  9.   

    Pattern.compile("[.C][0-9]+");
    正则中:
    .是任意字符,
    \.是转义的点号
    java参数中又进行了转义,所以两个反斜杠了