如果遇到这种序列,例如 1,2,3...9 除了 0 之外,第一个 if 条件应该为真,并且只允许 1 位数字通过。如果第二个 if 具有序列 12, 22, 33 .. 99(01,02...09 除外),则为 true。它只允许传递两位数字。但由于某种原因,第一个条件允许两位或更多数字,并且不会进入下一个条件。
Pattern num1 = Pattern.compile("([1-9&&[^0]]){1}");
Matcher matchNum1 = num1.matcher(min);
Pattern num2 = Pattern.compile("[1-9[^0]]{2}");
Matcher matchNum2 = num2.matcher(min);
if (matchNum1.find()) {
System.out.println("contains number and no trailing zeroes " + min );
}
else if (matchNum2.find()) {
System.out.println("contains 2 numbers " + min);
}
else {
System.out.println("No match");
}
最佳答案
您的正则表达式不会满足您的需要。请参阅以下正则表达式:
Pattern num1 = Pattern.compile("^[1-9]$");
Pattern num2 = Pattern.compile("^[1-9]\\d$");
-
block 引用>^
断言字符串开头的位置。
-[1-9]
匹配 1 到 9 之间的单个字符。
-\d
匹配数字 [0-9]。优雅的元字符表示法。
-$
断言字符串末尾的位置。
关于Java正则表达式与两个条件混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666654/