如何创建非负整数正则表达式?

时间:2014-05-19 05:50:38

标签: java regex

我想编译一个与非负整数匹配的Pattern。它应该查找一个或多个连续数字的序列,其前面没有另一个数字或负号。我已经能够编译以下内容:

Pattern digit = Pattern.compile("\\d");  //looks for single digits

但是假设我宣布以下内容:

String a = "90 210";
String b = "-90 210";
String c = "z90p210";
String d = "pz-90210";

digit会在所有这四个中匹配"9""0""2""1""0"。我对Pattern"90"中的"210"以及a中的"210"b"90"中的"210"感兴趣c中的d,与{{1}}中的任何内容都不匹配。

有没有办法忽略前面带有负号或其他数字的数字序列?

2 个答案:

答案 0 :(得分:2)

你可以使用负面的lookbehind断言:(?<!...) (不在前面)

Pattern digit = Pattern.compile("(?<![\\d-])\\d+");

答案 1 :(得分:0)

public static void main(String[] args) {
    String[] s = { "90 210", "-90 210", "z90p210", "pz-90210" };
    for (String str : s) {
        System.out.println(str
                .matches("(-|[A-Za-z])*?\\d+(\\s|[a-zA-Z])+\\d+"));

    }
}

O/P : true
true
true
false