Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式模拟数字的if-else_Java_Regex - Fatal编程技术网

Java正则表达式模拟数字的if-else

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])?(?:(?)

作为尝试模拟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-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 |