Java正则表达式模拟数字的if-else
作为尝试模拟if-else Java正则表达式的指南,我提出了:Java正则表达式模拟数字的if-else,java,regex,Java,Regex,作为尝试模拟if-else Java正则表达式的指南,我提出了: [0-2]?(?:)? 0-2之间的可选数字,包括最左边的数字;但是,如果第一个数字是2,那么右边的下一个数字最多可以是5。如果是0或1,或者是空白,那么0-9是有效的。我试图最终只允许用户写入数字0-255 在Regex101和javac上测试正则表达式在测试用例上都不起作用,尽管Regex101的解释与我想要的一致 当我测试正则表达式时: System.out.println(“0.matches”([0-2])?(?:(?)
[0-2]?(?:)?
0-2之间的可选数字,包括最左边的数字;但是,如果第一个数字是2,那么右边的下一个数字最多可以是5。如果是0或1,或者是空白,那么0-9是有效的。我试图最终只允许用户写入数字0-255
在Regex101和javac上测试正则表达式在测试用例上都不起作用,尽管Regex101的解释与我想要的一致
当我测试正则表达式时:
System.out.println(“0.matches”([0-2])?(?:(?)由于您试图只允许一个数字范围(0-255),为什么要使用正则表达式?相反,将字符串解析为int并检查它是否在该范围内
public static boolean isInRange(String input, int min, int max) {
try {
int val = Integer.parseInt(input);
return val >= min && val < max;
} catch (NumberFormatException e) {
return false;
}
}
publicstaticbooleanisinrange(字符串输入,int-min,int-max){
试一试{
int val=Integer.parseInt(输入);
返回值>=min&&val
我不明白为什么要模仿if
else
来检查范围。这只是把一些模式组合在一起
^(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$
^
开始锚定
(?:
打开一个用于替换的
[1-9]?\d
匹配0-99
1\d\d
匹配100-199
2[0-4]\d
匹配200-249
25[0-5]
匹配250-255
$
端锚
通过允许前导零,您可以将其减少到
解释为不起作用
表示并显示一些代码。@ScaryWombat在这个问题中没有必要的代码;正则表达式涵盖了这一点。不起作用相当明显表示与预期字符串不匹配。尽管如此,包含一些测试用例还是不错的。@Vulcan如果我t可以与Perl一起使用,但不能与Java一起使用,那么我建议需要一些代码。@ScaryWombat在Perl中使用if-else。Java不支持条件正则表达式,所以OP将正则表达式转换为Java(未成功)。不幸的是,这个练习的目的是只使用正则表达式,即使有更简单更好的方法,否则就是作弊。这并不完全是我想要的,因为我希望000、001或02这样的情况被接受,但我修改了它,预先加了:0\d | 00\d | 0\d\d |