刚才发为自己明白了 做了一个实验发现自己还是不明白
import java.util.regex.*;
class shiyan
{    public static void main(String args[])
    {
        String s1="wufangdong12489dna";
        
        Pattern pattern=Pattern.compile("\\w+\\d+\\w+");
        Matcher matcher=pattern.matcher(s1);
        
        while(matcher.find())
        {
            System.out.println(matcher.group());
        }
    }
}
上面这些代码 为什么只会输出wufangdong12489dna? 

ufangdong12489dna fangdong12489dna这样的难道就不符合这个表达式么?还有我把("\\w+\\d+\\w+");改成("\\w+(\\d+)\\w+");  再把group()改成group(1)为啥只输出9?  别的数字呢?各位老大们 请别回“看api” 我是看了才上来问滴 要是看懂了我就不上来问了。 
谢谢回答!

解决方案 »

  1.   

    贪婪匹配!
    Pattern pattern = Pattern.compile("\\w+?\\d+\\w+?");
    "wufangdong12489d"
      

  2.   

    至于为什么输出9,是因为\\w匹配了前面几个数字,但是为了匹配整个正则式,9就留给\\d+去匹配了
    "(\\w+)(\\d+)(\\w+)"输出group(1)/group(2)/group(3)看看结果
      

  3.   

    ufangdong12489dna fangdong12489dna这样的难道就不符合这个表达式么?
    -------
    既然前面的包含在内也匹配的话,不可能忽略前面的就取后面的,不然正则式的组合岂不是太多,效率太低