2

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

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

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

(\\d{1,64})

有人能帮我吗

4

2 回答 2

8
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);
于 2012-09-18T05:45:59.040 回答
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 正则表达式中添加一些注释,但我对 Java 的正则表达式语法不太了解,所以我将把它作为练习留给读者。

于 2012-09-18T05:57:22.440 回答