【问题标题】:regex in java with conditions带有条件的java中的正则表达式
【发布时间】:2012-09-10 08:42:59
【问题描述】:

我必须根据以下条件用Java编写Regex:

  • 总位数字符限制 = 64
  • 可以接受单个数字 0
  • 如果多于一个数字,则第一个数字必须是 1 到 9
  • 后面的数字可以是 0 到 9
  • 小数点后允许两位数
  • 不接受逗号

到目前为止,我只得到了这个:

(\\d{1,64})

谁能帮帮我

【问题讨论】:

    标签: java regex


    【解决方案1】:

    如果你把它分成 4 个场景,可能是最清晰的:

    (0(\.\d{1,2})?|[1-9](\d{0,63}|\d{0,61}\.\d|\d{0,60}\.\d\d))
    

    这是一个 0 可选地后跟一个小数和一个或两个数字,或者一个 1-9 后跟以下之一:

    • 最多多 63 个数字
    • 最多多 61 个数字,一个小数,多一个数字
    • 最多多 60 个数字,一个小数,多两个数字

    绝对值得在 Java 正则表达式中添加一些内联 cmets,但我对 Java 的正则表达式语法不太了解,所以我将把它作为练习留给读者。

    【讨论】:

      【解决方案2】:
      Pattern regex = Pattern.compile(
          "^             # Start of string                 \n" +
          "(?!.{65})     # Assert length not 65 or greater \n" +
          "(?:           # Match either                    \n" +
          " 0            #  0                              \n" +
          "|             # or                              \n" +
          " [1-9]\\d*    #  1-n, no leading zeroes         \n" +
          ")             # End of alternation              \n" +
          "(?:           # Match...                        \n" +
          " \\.          #  a dot                          \n" +
          " \\d{2}       #  followed by exactly 2 digits   \n" +
          ")?            # ...optionally                   \n" +
          "$             # End of string", 
          Pattern.COMMENTS);
      

      【讨论】:

      • 感谢您的解释。你摇滚。
      • @user1679321,如果这回答了您的问题,请检查它旁边的标记。欢迎来到 SO!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多