正则表达式数字空字符串

时间:2013-11-11 20:49:38

标签: java regex string

我对正则表达式评估有疑问。这里有一些java代码只测试字符串中的数字:

import java.util.regex.*;

public class RegexPractice
{
    public RegexPractice()
    {
    }

    public static void checkNum(String pattern)
    {
        if(pattern.matches("^\\d*"))
        {
            System.out.println(pattern);
        }
        else
        {
            System.out.println("false");
        }
    }

    public static void main(String args[])
    {
        checkNum("543853473");
        checkNum("ipabgrieahgbre");
        checkNum("frgwe9789fdsa798dfas");
        checkNum("54336534 4364 546 654");
        checkNum("");
        checkNum(" ");
    }

}

如果传递的字符串与正则表达式“^ \ d”匹配,则打印字符串,否则打印为false。我惊讶地看到打印出空字符串。为什么会这样?因为它不包含数字。

我知道我可以通过不允许空字符串来解决这个问题,但我很好奇为什么它被评估为真。

1 个答案:

答案 0 :(得分:2)

这是因为正则表达式:\\d*

表示匹配0位或更多位数,因此空字符串也会匹配。

成功:

pattern.matches("^\\d+$")

避免匹配空字符串并确保输入中仅匹配数字。

Recommended Reading on RegEx