2013-05-15 45 views
2

我是新来的正则表达式,并试图处理下面的正则表达式来udentify序中Outputing匹配的捕获组在java中

((\\d*1)st|(\\d*2)nd|(\\d*3)rd|(\\d+)th) 

我想捕捉只有文本解析,即数量的部分给定的文本。如果文本是21,那么我想捕获21被解析为整数。我知道如何匹配正则表达式来理解模式是否存在并获得特定的组。有什么办法可以得到匹配的表达组作为表达式的输出提取值?每侧我已经添加了通配符 -

在此先感谢

+1

仅供参考,'11th','12th'和'13th'。但是,由于你是匹配文本,它并不重要,(最后一种情况已经涵盖了这些)。 – nhahtdh

回答

1

你可以重写你的正则表达式使用非捕获组是这样的:

(?:(\\d*)(?:st|nd|rd|th)) 
+0

只要扔掉外面的非捕获组。你不需要在这里做任何分组。 – nhahtdh

+0

谢谢输出正是我需要的。 – user1411335

0

我已经简化您正则表达式,以及 - 重要的。第一个通配符有?为了防止贪婪匹配,摆脱第一个数字例如21st

模式/匹配器方法可以让您提取组。

Pattern p = Pattern.compile(".*?(\\d*(1st|2nd|3rd|th)).*"); 
String input = "21st March 2013"; 
Matcher m = p.matcher(input); 
if(m.matches()) 
    System.out.println(m.group(1)); 
+0

谢谢这有助于! – user1411335