2012-04-11 80 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]+/ 

它会从一开始或从匹配任何号码 - 到/

相关问题