首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java Regex模拟数字的if-else

Java Regex模拟数字的if-else
EN

Stack Overflow用户
提问于 2016-02-10 02:04:48
回答 2查看 76关注 0票数 1

使用作为试图模拟if-else Java regex的指南,我想出了:[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))来执行以下操作:

0-2之间的可选数字,其中包括最左边的数字;但是,如果第一个数字是2,那么右边的下一个数字可以是最大的5。如果是0或1,或左空,那么0-9是有效的。我试图最终允许用户只写数字0-255。

在Regex101和javac上测试正则表达式并不适用于测试用例,尽管Regex101解释与我想要的是一致的。

当我测试regex时:

System.out.println("0".matches("[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))")); -> false

System.out.println("2".matches("[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))")); ->真

System.out.println("25".matches("[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))")); ->假

System.out.println("22".matches("[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))")); ->假

System.out.println("1".matches("[0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))")); ->假

到目前为止,从很少的测试用例来看,2是正则表达式所接受的唯一有效案例。

作为参考,下面是我的初始正则表达式,使用if-else将数字限制在0-255:[0-2]?(?(?<=2)[0-5]|[0-9])(?(?<=25)[0-5]|[0-9])范围内。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 03:07:47

我不明白为什么要模仿if else来检查范围。只是把一些模式拼凑在一起。

代码语言:javascript
运行
复制
^(?:[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
  • $端锚

参见regex101演示

通过允许前导零,您可以将其缩减为

^(?:[01]?\d\d?|2[0-4]\d|25[0-5])$

票数 1
EN

Stack Overflow用户

发布于 2016-02-10 02:12:45

既然您只允许一个范围的数字(0-255),那么为什么要使用regex呢?相反,将字符串解析为int,并检查它是否在此范围内。

代码语言:javascript
运行
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35305658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档