2013-07-29 46 views
5

問題:其中正則表達式中的每個字符最多出現一次爪哇:正則表達式,其中每個字符發生0-1次

  1. 匹配的話。

  2. 這個詞必須是具有一定規模的,比方說,「{2,5}」

  3. 一個特定的字符必須是字,比方說字符「E」

我有什麼:

word.matches("^[abcde]{2,5}$"); 

這其中的字符A,b,C,d和e出現0..5次所有詞相匹配。因此即使「abba」兩次使用char「b」而「dead」兩次使用char「d」,詞語「abba」和「dead」也是匹配的。該表達式也忽略了字符「e」是否在該單詞中。

我想要的是一個匹配,每個字符最多使用一次,單詞長度爲2-5個字母,字符「e」在單詞中。例如,一個合法的匹配就會成爲「珠子」,因爲每個字符最多使用一次,而字符「e」在字中。

+1

這將是一個複雜的正則表達式。我建議不要使用正則表達式。正則表達式無法「在字符串中的任何位置匹配」。 –

回答

11

你可以使用這樣的表達式:

^(?=[abcd]*e)(?:([abcde])(?![abcde]*?\1)){2,5}$ 

一些評論:

^ 
(?=[abcd]*e)  # make sure there is an "e" 
(?: 
    ([abcde])  # match a character and capture it 
    (?!   # make sure it's not repeated 
    [abcde]*? 
    \1   # reference to the previously matched char 
) 
){2,5} 
$ 
+0

似乎工作,我認爲這會變得更加複雜。很好的回答+1。 –

+1

+1不錯的正則表達式。 :) –

+1

@RohitJain,'#comments'在使用'(?x)'或等效標誌時,在正則表達式字符串中是有效的註釋。因此,請將其留在。[文檔](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#COMMENTS)。 – Qtax

相關問題