我想编译一个与非负整数匹配的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}}中的任何内容都不匹配。
有没有办法忽略前面带有负号或其他数字的数字序列?
答案 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