2014-03-31 23 views
0

我有這段代碼,我想找到1234和4321,但目前我只能得到4321.我該如何解決這個問題?如何在正則表達式中使用組在java中?

String a = "frankabc123 1234 frankabc frankabc123 4321 frankabc"; 
String rgx = "frank.* ([0-9]*) frank.*"; 
Pattern patternObject = Pattern.compile(rgx); 
Matcher matcherObject = patternObject.matcher(a); 
while (matcherObject.find()) { 
    System.out.println(matcherObject.group(1)); 
} 
+1

你的正則表達式應該是'坦率。*? ([0-9] *)坦率地說,否則,'。*'會吃掉所有東西。 – nhahtdh

+0

瞭解[懶惰vs貪婪](http://stackoverflow.com/questions/2301285/what-do-lazy-and-greedy-mean-in-the-context-of-regular-expressions)量詞。 –

+0

要詳細說明@nhahtdh說的是什麼,默認情況下'*'是貪婪的,這意味着它會匹配儘可能大的數量。給它添加一個'?'使其不貪婪。 –

回答

1

您的r.e.是不正確的。第一部分:frank.*匹配所有內容,然後回溯直到比賽剩下的成功。試試這個:

String rgx = "frank.*? ([0-9]*) frank"; 

?後量詞會使其不願意,儘可能少的字符匹配所必需的圖案的其餘部分相匹配。尾隨.*也造成問題(如nhahtdh在評論中指出)。

+0

@nhahtdh - 好點。現在修復。 –

2

你的正則表達式太貪婪。使它不貪婪。

String rgx = "frank.*? ([0-9]+) frank"; 
相關問題