0

我有 2 个进行模式匹配的 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

有人可以解释正则表达式在这两种情况下是如何工作的。为什么在程序 1 中,匹配是从字节 0 开始的……而在程序 2 中,匹配是在整个字符串上匹配的?

4

2 回答 2

2

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

您会得到0 个长(空)数字字符串的结果...

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

推荐阅读

于 2013-09-23T14:08:07.410 回答
0

因为*in\\d*使数字成为可选的。也就是说,该模式匹配每个字节。当数字在那里时,它也会专门匹配数字,但不是必须的。

Dog不是模式的可选部分,是匹配所必需的。

于 2013-09-23T14:08:36.570 回答