gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:03:48 25 4
gpt4 key购买 nike

使用this作为尝试模拟 if-else Java 正则表达式的指南,我想出了: [0-2]?(?:(?<=2)(?![6-9])|(?<!2)(?=[0-9]))执行以下操作:

最左边的数字为 0-2 之间的可选数字;但是,如果第一个数字是 2,则右侧的下一个数字最多可以是 5。如果是 0 或 1,或者留空,则 0-9 有效。我试图最终允许用户只写数字 0-255。

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

当我测试正则表达式时:

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

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])

最佳答案

我不明白为什么要模仿 if else 来检查范围。它只是将一些模式组合在一起。

^(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$
  • ^ 开始 anchor
  • (?: 打开 non capture group 进行交替
  • [1-9]?\d 匹配 0-99
  • 1\d\d 匹配 100-199
  • 2[0-4]\d 匹配 200-249
  • 25[0-5] 匹配 250-255
  • $ 结束 anchor

See demo at regex101

通过允许前导零,您可以将其减少到
^(?:[01]?\d\d?|2[0-4]\d|25[0-5])$

关于Java 正则表达式模仿数字的 if-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com