System.out.println("hh h".matches("hh\\b.{2,4}"));
输出:true
我在\\b后面的.明明写的是{2,4}个字符但是实际只有一个字节(这里还想问下,在正则中分字节和字符吗)
请问原因?

解决方案 »

  1.   

     加中括号 
    System.out.println("hh h".matches("hh\\b[.]{2,4}"));
      

  2.   

    为什么呢?
    还有我这样
    System.out.println("hh h".matches("hh\\b."));
    System.out.println("hh h".matches("hh\\b.?"));
    输出的是:
    false
    false
    求原因
      

  3.   


    System.out.println("hh h".matches("hh\\b."));
     此时点号匹配一个字符,肯定为false
    System.out.println("hh h".matches("hh\\b.?"));
    一样的匹配0或者1个,也为false
      

  4.   

    System.out.println("hh h".matches("hh\\b.."));
    System.out.println("hh h".matches("hh\\b.?h"));
    这样就都为true了
      

  5.   

    System.out.println("a".matches(".{1}"));
    输出:true
    a明明是一个字节,但是.是匹配一个字符为什么还是true呢
      

  6.   

    hh\\b.{2,4}  这句话的意思是:
    hh后面 是单词分隔符标识(应该是只要不是字母就行)如 hh@h  hh.h都可以都可以把 hh分隔出来
    很显然 现在是被空格 分隔了
    那么后面的“ h”是可以匹配上 .{2-4}的。
    比如 hh hsdc 这个就超出了。因为它的长度是5.
      

  7.   


    Pattern p = Pattern.compile("\\b.{2,4}");
            
            Matcher m = p.matcher("hh h");
            while(m.find()){
             System.out.println(m.group());
            }