简单正则表达式匹配前导零

时间:2012-08-25 20:17:29

标签: java regex

我是否误解了有关Java正则表达式的内容?以下不应与前导零匹配:

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}

5 个答案:

答案 0 :(得分:4)

String.match想要匹配整个String,而您的正则表达式^0 不会

相反,你需要一个正则表达式:0.*,这意味着"字符串以0开头,后跟零个或多个字符"。或者,根据您的需要,0\d*,这意味着"字符串以0开头,后跟零或更多数字",这就是您的示例输入的样子。

if ("0115724848".matches("0\\d*"))
    System.out.println("leading zero.");

答案 1 :(得分:4)

matches尝试将模式与输入字符串的整个进行匹配...并且您的输入字符串不仅仅是“字符串开头后跟0”。

您需要"0.*"^是不必要的,因为matches会匹配整个字符串),或者您可以创建Pattern然后使用:

if (pattern.matcher(text).lookingAt())

当然,目前尚不清楚为什么你在这里使用正则表达式,因为你可以使用:

if (text.startsWith("0"))

答案 2 :(得分:2)

这是您应该使用的模式:

  

^ 0。*

另外为什么不使用 startsWith(“0”) - 更简单

答案 3 :(得分:0)

检查此代码..它应该可以工作。

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0.*")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}

答案 4 :(得分:0)

此正则表达式将匹配带前导零的数字,但不匹配“0”:/ ^ 0 + [1-9] /