嗨,我正在尋找一個正則表達式命令來匹配只有2個字母'a'或'A'的單詞。單個'a'是可以的,但是當單詞包含3個或更多'a'時,它們是錯的。正則表達式/ Java。用'aa'序列匹配單詞
摹AA SSCC - 好
EAAASCS - 壞
AAASD AA - 壞
ASBS AA - 好
嗨,我正在尋找一個正則表達式命令來匹配只有2個字母'a'或'A'的單詞。單個'a'是可以的,但是當單詞包含3個或更多'a'時,它們是錯的。正則表達式/ Java。用'aa'序列匹配單詞
摹AA SSCC - 好
EAAASCS - 壞
AAASD AA - 壞
ASBS AA - 好
在匹配每個單個字符之前,檢查是否爲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
您可以用至少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的單詞。
也許這樣會工作:
[^aA]*[aA]{2}[^aA]*