2016-07-08 52 views
2

我需要使用正則表達式檢查字符串。檢查具有多個長度模式的字符串

有效的字符串是例如:ABC0001A00023

有三個部分我要檢查:

  1. 所以字符串應該用字招牌開始:[a-zA-Z]{1,}
  2. 再就是分鐘一個零:[0]{1,}
  3. 第三部分是一個數字\\d+

整個字符串可能不會超過8個符號。

我試過到目前爲止:

String NR_PATTERN = "^([a-zA-Z]{1,}[0]{1,}\\d+){3,8}$"; 

的問題是,正則表達式不接受的字符串:KDS0234

+0

你有這種表達的問題是(除了事實,你可以通過插入零或其他字母有任意長度的字符串等並且'[0]'和裸骨骼'0'相同)? – dhke

+1

'「^([a-zA-Z] {1,} [0] {1,} \\ d +){3,8} $」; 'mean [(a-zA-Z] {1,} [0] {1,} \\ d +)'出現3-8次,不是整個長度是3-8 –

+0

嘗試像這樣:[''^( ?!。{9})[AZ] +0+ [1-9] \\ d * $「'](http://fiddle.re/12v3ha) –

回答

3

你可以在一開始就積極的前瞻嘗試:

(?=^.{3,8}$)([a-zA-Z]{1,}[0]{1,}\\d+) 

正前瞻:

(?=^.{3,8}$) 

將展望?=並確認從乞討innning ^到結尾$的字符串,有任何字符匹配. 3到8次{3,8}

1

(…){3,8}意味着你要...序列3和8倍之間進行反覆,而不是字符串是8個字符

你可以只使用(知道你說你需要一個正則表達式,但也許這會對你有用)

String NR_PATTERN = "[a-zA-Z]+0+\\d+"; 
String s = "ABC0001"; 
boolean match = s.length() < 8 && s.matches(NR_PATTERN); 
1

您可以在先行檢查長度條件再搭配你的模式:

\b(?=[a-zA-Z0-9]{3,8})([A-Za-z]+0[0-9]+)\b 
0
(?=^.{3,8}$)([a-zA-Z]+[0]+\d+) 

希望這有助於

+0

請編輯更多信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。我們在這裏努力成爲知識的資源。 – abarisone

+0

儘管此代碼可能有助於解決問題,但 提供了有關_why_和/或_how_的其他上下文,回答該問題將顯着提高其長期價值。請[編輯]你的答案,添加一些 的解釋。 –

1

你可以去:

\b(?=[A-Z]+0+\d+)\w{3,8}\b 

a demo on regex101.com,在Java使用雙反斜線。


這將匹配:

ABC0001 A00023 and ABCD001 

但不是

B123456 or 0001B 
+1

在OP中:「整個字符串不得超過8個符號。」 – DVarga