2013-10-23 76 views
0

我希望我的mPattern在搜索字符串中匹配FFF1FFF3字符串至少4次。我寫了兩個模式版本,但都沒有給出任何匹配。正則表達式不會匹配任何東西

Pattern mPattern = Pattern.compile("(FFF1|FFF3){4,}"); 

VER2:

Pattern mPattern = Pattern.compile("(FFF1{4,}|FFF3{4,})"); 

搜索串是(例如):

0DCB1C992B37173740244875C143D50ACDBA0422CD01D73D3C78F05ED7BBC2B33F9D78A7FFF342C0241C6B56B11EC1867984C20F42A4FAC5B9C0 
42220314C006D94E124673CD4CC27FC2FCE12215410F12086BE5A3EDFC6DB2BEB0EAEC6EAAA4BF997FFB3337F914AB1A89C808EA6D338912D72E 
99CE11E899999D3AE1092590FB2B71D736DC544B0AFD1035A3FFF340C00E178B62E5BE48C46F04B8EFC106AE3F17DDE08B5FD48672EBEABB216A 
8438B6FB3B33BF91D3F3EBFCE14184320532ABA37FFD59BFF6ABAD1AA9AADEE73220679D2C7DDBAB766433A99D8CA752B383067465691750A24A 
00F32A5078E29258F6D87A620AFFF342C00A158B22E5BE5944BAE8BA2C54739BE486B719A76DF5FD984D5257DBEAC43B238598EFAB3592DE8DD5 

回答

5

圖案"(FFF1|FFF3){4,}"將匹配FFF1FFF3相鄰放置,具有4個或更多的重複。我想在多個事件之間可以有任何字符。在這種情況下,使用下面的正則表達式:

"^(?:.*?(FFF1|FFF3)){4,}.*$" 

.*?匹配任何字符,直到下一個FFF1FFF3,然後匹配FFF1|FFF3。重複該順序4次或更多次(應用於整個非捕獲組)。

您可以直接使用上述模式與String#matches(String)方法。或者,如果你正在構建PatternMatcher對象,那麼就使用下面的模式與方法Matcher#find()

"(?:.*?(FFF1|FFF3)){4,}" 

工作代碼:

String str = "..."; // initialize 

Pattern mPattern = Pattern.compile("(?x)" + // Ignore whitespace 
         "(?:   " + // Non-capturing group 
         " .*?   " + // 0 or more repetition of any character 
         " (FFF1|FFF3) " + // FFF1 or FFF3 
         "){4,}   " // Group close. Match group 4 or more times 
           ); 

Matcher matcher = mPattern.matcher(str);   
System.out.println(matcher.find()); 
+0

感謝這個輝煌的解釋。非常感謝。 – Kristopher

+0

@soulreaver不客氣:) –

相關問題