2012-09-18 75 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的正則表達式的語法,所以我會離開,作爲一個練習留給讀者。