2015-02-07 58 views

回答

1

在匹配每個單個字符之前,檢查是否爲aaa。這可以通過負面預測斷言來完成。

String line[] = {"GAASSCC", "EAAASCS", "AAASDAA", "ASBSAA" }; 
for (String i : line) 
    if(i.matches("(?i)^(?:(?!aaa).)*?(?<!a)aa(?!a).*")) 
    { 
     System.out.println(i +" -> Good"); 
    } 
    else 
    { 
     System.out.println(i +" -> Bad"); 
    } 

輸出:

GAASSCC -> Good 
EAAASCS -> Bad 
AAASDAA -> Bad 
ASBSAA -> Good 

說明:

  • (?i)

    稱爲不區分大小寫的改性劑。這使得正則表達式可以匹配大寫和小寫字母。

  • ^斷言我們是在開始。

  • (?:(?!aaa).)*?這裏是棘手的部分。首先檢查不是aaa。如果沒有a而後面沒有兩個a字符,則只有相應的字符會匹配。

  • (?<!a)此斷言,我們要匹配字符串不會被字符a

  • aa匹配字符串aa

  • (?!a)負先行斷言它前面的比賽不會後面跟着字符a

0

您可以用至少3個A的中篩選出所有單詞一排此:

\b\w*[aA]{3,}\w*\b 

說明:

\b:字邊界。基本上,一個詞的開始或結束。

\w*:任意數量的字母。所以零或更多。

[aA]:要麼a或A

{3,}:三個或更多次前一元素([aA]

所以這個發現,具有至少三個A的行中的所有詞語,通過任何數量的包圍其他信件。

如果您希望按順序查找包含一個或兩個A的單詞,則可以將上述內容修改爲\b\w*[aA]{1, 2}\w*\b。實際上,您也可以使用\b\w*[aA]+\w*\b,因爲您已經過濾了三個或更多個A的單詞。

0

也許這樣會工作:

[^aA]*[aA]{2}[^aA]*