import java.util.regex.*;public class Sort {
public static void main(String[] args) {
Pattern p=null;
Matcher m=null;
boolean b;
String s=null;
p=Pattern.compile("a*b");
m=p.matcher("abbbbbbbb"); 
b=m.matches();
System.out.println(b);

p=Pattern.compile("a*b");
m=p.matcher("abbababadbb");
s=m.replaceAll("d");
System.out.println(s);
}
}
结果是b为false。s为ddddaddd。怎么来的??
a*b是不是只包含ab,aab,aaab,aaaab.....这些?
s是怎么匹配来的没看懂。

解决方案 »

  1.   

    m=p.matcher("abbababadbb");
    拆分:
    abbababadbb
    ab = d
    b  = d
    ab = d
    ab = d
    a  = a
    d  = d
    b  = d注意你中间有个字串是 ad 是无法匹配的, 因为 b 是必须的.
    b  = d
      

  2.   

    注意在正则表达式中 "*"号的意思是 >= 0 个.也就是说他也可以匹配"b" 
    "abbababadbb" 匹配中应该是这样分的ab b ab ab ad b b 进行匹配的其中的"ad"没有匹配而b=m.matches();则尝试进行全文匹配
      

  3.   

    第一个为false是因为,a*b代表的String是 前面0到无数个a,然后后面一个b
    b,ab,aab,aaab,...第二个的依次置换过程是
    abbababadbb
    dbababadbb
    ddababadbb
    dddabadbb
    ddddadbb
    ddddaddb
    ddddaddd程序没有欺骗你,结果是对的。