2009-11-06 58 views
2
111111111 - Invalid 
A121278237 - Invalid 
7777777777 - Invalid 

121263263 - Valid 
111111112 - Valid 
+0

這是功課? – finnw 2009-11-06 11:52:07

+0

不..不是.. – Milli 2009-11-06 11:55:20

+2

那麼爲什麼「使用正則表達式」的限制呢? – CPerkins 2009-11-06 11:55:40

回答

12
^([0-9])(?!\1+$)[0-9]+$ 

應該工作。它需要至少兩位數的字符串才能成功匹配。

說明:

  1. 匹配的一個數字,並捕獲它變成反向引用#1:([0-9])

  2. 斷言,這是不可能匹配任何長度的字符串(> 1)相同的位的那剛剛匹配,然後是字符串的末尾:(?!\1+$)

  3. 然後匹配任何字符串的數字,直到字符串的末尾:[0-9]+$

編輯:當然,在Java中,您需要轉義字符串內的反斜槓("\\")。

+0

的確如此。 +1「 – Jonik 2009-11-06 11:59:01

+0

」11「.matches(」^([0-9])(?!\ 1 + $)[0-9] + $「);這返回true! 「 – Milli 2009-11-06 12:03:53

+0

」假定至少有兩位數的字符串「 - >」假定一個長度爲2或更長的字符串「?我的意思是,正則表達式似乎對所有這樣的字符串都正確工作;例如「A1」 - > false。 – Jonik 2009-11-06 12:04:15

2
  1. 取一個[0-9]正則表達式並丟棄不僅包含數字的字符串。
  2. 取第一個字符,並將其用作正則表達式[C] +以查看該字符串是否包含任何其他數字。
+0

對於生產代碼,我可能更喜歡這種方法:使用非常簡單的正則表達式在單獨的步驟中執行檢查。這樣代碼將更容易被團隊中的其他人所理解。所以也爲此+1。 – Jonik 2009-11-06 13:14:09

0

建立在Tim的答案上,通過添加或子句來消除「至少兩位數」的要求。

^([0-9])(?!\1+$)[0-9]+$|^[0-9]$ 

例如:

String regex = "^([0-9])(?!\\1+$)[0-9]+$|^[0-9]$"; 
boolean a = "12".matches(regex); 
System.out.println("a: " + a); 
boolean b = "11".matches(regex); 
System.out.println("b: " + b); 
boolean c = "1".matches(regex); 
System.out.println("c: " + c); 

回報

a: true 
b: false 
c: true 
相關問題