2013-05-15 71 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