【问题标题】:regex digit empty string正则表达式数字空字符串
【发布时间】:2013-11-11 20:49:38
【问题描述】:

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

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

【问题讨论】:

    标签: java regex string


    【解决方案1】:

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

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

    制作:

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

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

    Recommended Reading on RegEx

    【讨论】:

    • 我明白了,我应该更仔细地阅读。也可以通过评估来达到同样的效果: "^\\d\\S*" ?
    • ^\\d\\S* 将匹配一个数字,后跟 0 个或多个非空格字符。所以它将匹配1 OR 100 OR 5%
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多