1

我有一个关于正则表达式评估的问题。这是一些仅测试字符串中的数字的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”匹配,则打印字符串,否则打印错误。我惊讶地发现空字符串被打印出来了。为什么会这样?因为它不包含数字。

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

4

1 回答 1

2

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

这意味着匹配 0 个或多个数字,因此空字符串也算数。

做了:

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

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

正则表达式推荐阅读

于 2013-11-11T20:50:54.373 回答