package scjp.chapter6;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Regex2 { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while (b = m.find()) {
System.out.println(m.start() + " " + m.end());
}
}
}
这个匹配的时候为什么会匹配到索引6去呢,匹配的字符串一共才6个啊;另外*的匹配到底是怎么进行的?

解决方案 »

  1.   

    1对应a
    2对应b
    3对应34
    5对应e
    6对应f*的匹配看这月的程序员,写的非常好,简单说是因为正则用的NFA,因此在匹配时,正则式不动,扫描字符串,这样3和4都会匹配,然后扫描到e,发现不匹配退回.我去年考的SCJP,现在忘了些,我也做过这题,当时也很晕
      

  2.   

    a    b    3    4    e   f
     0    1    2    3    4    5   6
      

  3.   

    a    b    3    4    e   f
     0    1    2    3    4    5   6
      

  4.   


       a    b    3    4    e   f
     0    1    2    3    4    5   6
      

  5.   

    Areslp(努力ING) ( ) 信誉:100    Blog  2007-3-30 14:59:09  得分: 0  
        
    \d*应该是匹配数字或者空串
       Areslp(努力ING) ( ) 信誉:100    Blog  2007-3-30 15:00:56  得分: 0  
     
     6指向什么了,那没东西了啊,怎么还能算匹配上了呢  =======
    ???