正则表达式模式匹配java

正则表达式模式匹配java,java,regex,Java,Regex,我有两个java程序进行模式匹配 方案-1 public class test { public static void main(String[] args) { Pattern p = Pattern.compile("\\d*"); Matcher m = p.matcher("ab34ef"); boolean b = false; while (b = m.find

我有两个java程序进行模式匹配

方案-1

    public class test {

        public static void main(String[] args) {
            Pattern p = Pattern.compile("\\d*");
            Matcher m = p.matcher("ab34ef");
            boolean b = false;
            while (b = m.find()){
                System.out.println(m.start());
                System.out.println(m.group());
            }
        }
    }
输出:

    0
    1
    2
    34
    4
    5
    6
方案-2

public class test {

    public static void main(String[] args) {
        Pattern p = Pattern.compile("Dog");
        Matcher m = p.matcher("This is a Dog and Dog name is Tommy");
        boolean b = false;
        while (b = m.find()){
            System.out.println(m.start());
            System.out.println(m.group());
        }
    }
}
输出-

    10
    Dog
    18
    Dog

有人能解释一下正则表达式在这两种情况下是如何工作的吗。。为什么在program-1中,匹配从字节0开始,然后在那里开始…而在program-2中,匹配在整个字符串上进行匹配?

\\d*
表示包含0个或更多数字的字符串

您将获得0个长(空)数字字符串的结果

您可能应该尝试
\\d+
查找长度至少为1的数字字符串

推荐阅读

因为
\\d*
中的
*
使数字可选。也就是说,该模式匹配每个字节。当数字出现时,它也会特别匹配这些数字,但不一定要匹配

Dog
不是模式的可选部分,需要匹配