2011-06-29 91 views
1

我在粗糙形式幾個字符串:Regex的靜態組問題

[一些號碼與一個或2位數] [一些文本] [文本是ABC或BC] [一些文本]

String test = "12testABCtest"; 
Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*)(ABC|BC)([\\w]*)"); 

但它給我的總是「BC在第三組,而不是ABC(因爲它包含一個以前組)

你有任何想法,該怎麼辦呢?

謝謝,

+4

而不是'[\\ d]'你可以寫'\\ d',對於'\\ w'也是。 '(ABC | BC)'可以寫成'(A?BC)'。 – Qtax

回答

8

可以使文本匹配非貪婪:

Pattern p = Pattern.compile("([\\d]{1,2})([\\w]*?)(A?BC)([\\w]*)"); 

參考:

Reluctant quantifiers 
----------------------------- 
X??  X, once or not at all 
X*?  X, zero or more times 
X+?  X, one or more times 

來源:Pattern javadoc: Reluctant quantifiers

基本上是:不願意量詞會少匹配可能的,而不是默認的貪婪量詞,它將與possi一樣多BLE。通過將?添加到另一個量詞,可以得到一個不情願的量詞。