2013-01-17 50 views
4

有人可以幫我解釋下面的代碼嗎?謝謝。我對正則表達式分組有點困惑。Java正則表達式組0

public static String evaluate(String s) { 
    if (s == null) return ""; 

    Matcher m = Pattern.compile("[0-9]*").matcher(s); 

    if (m.find()) { 
     MatchResult mr = m.toMatchResult(); 
     return mr.group(0); 
    } 
    return ""; 
} 
+2

[這](http://docs.oracle.com/javase/ tutorial/essential/regex/groups.html)可能會讓你感興趣。 'group(0)'是完全匹配的,'group(1)'在你的正則表達式的第一組'(...)'中匹配,依此類推。 – Pshemo

回答

8

documentation

零組表示整個模式,所以表達式m.group(0)相當於m.group()

換句話說,mr.group(0)是整個比賽。

+0

可以用更容易理解的方式解釋嗎?對不起,我是新來的Java正則表達式... – user1653240

7

希望這使得組0更加清晰:

例子:

String str = "start123456end"; // Your input String 


    //         Group#1 Group#2 
    //         |  | 
    Pattern p = Pattern.compile("start([0-9]*)(end)"); 
    //       |<--- Group#0 --->| 


    Matcher m = p.matcher(str); // Create a matcher for regex and input 

    while(m.find()) // As long as your regex matches something 
    { 
     System.out.println("group#0:\t" + m.group()); // Or: m.group(0) 
     System.out.println("group#1:\t" + m.group(1)); 
     System.out.println("group#2:\t" + m.group(2)); 
    } 

輸出:

group#0: start123456end 
group#1: 123456 
group#2: end 

您可以「存儲」某些部分你的正則表達式分組。在我的例子,你有他們(團體()之間)的3:字號和之間開始結束

  • 1組。
  • 組2:年底字只有
  • 組0:多數民衆贊成在整個的事情,你的模式匹配的 - 組0被保留,總是會返回整場比賽,而其他都是可選的並由您定義。

根據您的代碼:

例子:

Matcher m = Pattern.compile("[0-9]*").matcher("123456end"); // Matches all numbers 

if(m.find()) 
{ 
    System.out.println(m.group(0)); // m.group() possible too 
} 

目前只有一組:0

輸出:123456(=組0)

現在讓放些基團引入到圖案:

代碼:

//       Group#1  Group#2 
    //        |   | 
    Matcher m = Pattern.compile("([0-9])[0-9]([0-9])*").matcher(str); // Matches all numbers 
    //       |<---- Group#0 ---->| 

    if(m.find()) 
    { 
     System.out.println("group#0:\t" + m.group(0)); // m.group() possible too 
     System.out.println("group#1:\t" + m.group(1)); // 1st digit 
     System.out.println("group#2:\t" + m.group(2)); // 3rd digit 
    } 

現在有兩個以上的組。

輸出:

group#0: 123456 
group#1: 1 
group#2: 6 

我建議你這個文檔:Lesson: Regular Expressions。從第一章開始,並嘗試用自己的例子。

附加: