2015-12-22 19 views
1

在Java中,使用正則表達式,我將如何檢查字符串以查看它是否具有正確數量的字符實例。用於多個字符實例的正則表達式

例如取字符串hello.world.hello:world:。如何檢查該字符串是否包含.的兩個實例或:的兩個實例?

我已經試過

Pattern p = Pattern.compile("[:]{2}"); 
Matcher m = p.matcher(hello.world.hello:world:); 
m.find(); 

但失敗了。

編輯

首先,我想說感謝你所有的答案。我注意到很多答案都是這樣說的:「這意味着:zero or more non-colons, followed by a single colon, followed by zero or more non-colons - matched exactly twice」。因此,如果您正在檢查字符串(如Hello::World:)中的3 :,您會怎麼做?

+0

如果它恰好是一個字符,則某些循環測試/計數相當簡單。 –

+0

@ guillaumegirod-vitouchkina我知道。我只是用一個正則表達式的方式 – Dan

+0

@Reimeus是的,只要它使用正則表達式 – Dan

回答

1

您可以使用基於兩個向前看符號斷言這個表達式:

^(?=(?:[^.]*\.){2}[^.]*$)(?=(?:[^:]*:){2}[^:]*$) 

(?=(?:[^.]*\.){2}[^.]*$)確保恰好有2個點和(?=(?:[^:]*:){2}[^:]*$)斷言恰好有2個冒號中輸入字符串。

RegEx Demo

+0

也許它是好的,但它是不可讀的,兩個! –

3

好,使用matches你可以使用:

"([^:]*:[^:]*){2}" 

這意味着:「零個或多個非冒號,後跟一個冒號,然後零個或多個非冒號 - 匹配恰好兩次「。

使用find並不好,因爲可能會有額外的:,它會忽略它們。

1

您可以確定字符串是否有exectly某個字符的給定數量,說':',通過嘗試匹配它是這種形式的模式:

^(?:[^:]*[:]){2}[^:]*$ 

,說正好有兩個非捕獲組由除':'之後的任意數字(包括零)之後跟一個冒號組成,第二組由除':'以外的任意數量的其他字符組成。

相關問題