我必须根据以下条件用Java编写Regex:
- 总位数字符限制 = 64
- 单个数字 0 是可以接受的
- 如果多于一个数字,则第一个数字必须是 1 到 9
- 以下数字可以是 0 到 9
- 小数点后允许两位数
- 不接受逗号
到目前为止,我只得到了这个:
(\\d{1,64})
有人能帮我吗
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);
如果你把它分成 4 个场景,可能是最清晰的:
(0(\.\d{1,2})?|[1-9](\d{0,63}|\d{0,61}\.\d|\d{0,60}\.\d\d))
这是一个 0 可选地后跟一个小数和一个或两个数字,或者一个 1-9 后跟以下之一:
绝对值得在 Java 正则表达式中添加一些注释,但我对 Java 的正则表达式语法不太了解,所以我将把它作为练习留给读者。