2012-04-11 38 views
1

這是我的示例數據:正則表達式如何獲取子字符串?

406/FG-2000 

411/FA-2120 

XX-226/2012-DFDF 

OASDV-279/1016-FDFFD 

如何在Java正則表達式(僅正則表達式)我解析

406/FG-2000 -> 406 (from begining to /) 

411/FA-2120 -> 411 (from begining to /) 

XX-226/2012-DFDF -> 226 (from - to /) 

OASDV-279/1016-FDFFD -> 279 (from - to /) 

這兩個規則。 (從王建宇,山西高等學校/)或(從 - 到/)

+1

根據您的TESTDATA:是第三規則「必須是數字」? – 2012-04-11 06:40:28

回答

4

此代碼,你問什麼:

input.replaceAll(".*(^|-)(.*?)/.*", "$2") 

如果你想限制它只是個數字,匹配正則表達式更改爲".*(^|-)(\\d*?)/.*"

這是一個測試:

public static void main(String[] args) { 
    String[] inputs = { "406/FG-2000", "411/FA-2120", "XX-226/2012-DFDF", "OASDV-279/1016-FDFFD" }; 
    for (String input : inputs) 
     System.out.println(input.replaceAll(".*(^|-)(.*?)/.*", "$2")); 
} 

輸出:

406 
411 
226 
279 
+0

這是一個偉大的正則表達式! – powerMicha 2012-04-11 06:45:39

+0

我測試在這裏:http://www.roblocher.com/technotes/regexp.aspx但我得到組1和組2。爲什麼不只是1結果? – senzacionale 2012-04-11 07:24:06

+0

組是括號內的表達式。在正則表達式中有兩個組,但第一個只是因爲「OR」表達式。第二組是「真正的」捕獲組 – Bohemian 2012-04-11 09:24:26

0

試試這個:

(^|-)[0-9]+/ 

它會從一開始或從匹配任何號碼 - 到/