次の条件に従って、Javaで正規表現を作成する必要があります。
- 合計桁数制限 = 64
- 1 桁の 0 が許容されます
- 1 桁以上の場合、最初の桁は 1 から 9 でなければなりません
- 次の数字は 0 ~ 9 です
- 小数点以下は 2 桁まで使用できます
- カンマは使用できません
これまでのところ、私はこれしか持っていません:
(\\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桁または2桁の数字が続くか、1-9の後に次のいずれかが続く場合です。
Java正規表現にインラインでコメントを追加する価値は確かにありますが、私はJavaの正規表現構文にあまり精通していないので、読者のための演習として残しておきます。