2012-09-18 48 views
2

我具有根据以下条件在Java写的正则表达式的java:正则表达式与条件

  • 总位字符的限制= 64
  • 0一位数字是可以接受的
  • 第一个数字必须是图1至9,如果一个以上的数字
  • 以下数字可通过9名
  • 两个数字被一个小数点后允许
  • 逗号的是0不接受

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

(\\d{1,64}) 

有人可以帮助我

回答

7
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

谢谢你的解释。你摇滚。 – user1679321

+0

我要去收藏此页...... – PermGenError

+0

@ user1679321,如果这个回答你的问题,请旁边的标记。欢迎来到SO! – ikegami

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的正则表达式的语法,所以我会离开,作为一个练习留给读者。