2016-08-18 4 views
0

Ich bin nicht in der Lage, die Ausgabe von Gruppen zu verstehen, wie es jede Paranthese im Muster berücksichtigt und dies hier mit der Variablen 'line' gleichsetzt. Bitte erläutertJava Regex Gruppen

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexTut3 { 

    public static void main(String args[]) { 
    String line = "This order was placed for QT3000! OK?"; 
    String pattern = "(.*)(\\d+)(.*)"; 

    // Create a Pattern object 
    Pattern r = Pattern.compile(pattern); 

    // Now create matcher object. 
    Matcher m = r.matcher(line); 

    if (m.find()) { 
     System.out.println("Found value: " + m.group(0)); 
     System.out.println("Found value: " + m.group(1)); 
     System.out.println("Found value: " + m.group(2)); 
    } else { 
     System.out.println("NO MATCH"); 
    } 
    } 
} 
+0

mich Zitiert ... [hier] (http://stackoverflow.com/questions/17969436/java-regex-capturing -Gruppen/17969620 # 17969620). – Mena

+0

Der Regex erfasst nur so viele Zeichen außer einem Zeilenumbruch bis zur letzten Ziffer (und wird in Gruppe 1 platziert), dann wird die letzte Ziffer in Gruppe 2 platziert und der Rest der Zeile wird in Gruppe 3 platziert gierige Quantifier und Backtracking. –

Antwort

-1

Das Muster "(.*)(\\d+)(.*)" Mittel:

(.*) - Consume anything and store it in group 0 
(\\d+) - Consume a number and store it in the next group, i.e. group 2 
(.*) - Consume anything and store it in the next group 

Auf diese Weise wird das Muster eine Zahl in der Zeichenfolge finden und alles zu speichern, bevor es in Gruppe 0, die Zahl in der Gruppe 1 und der Rest der Schnur in Gruppe 2.

-1

m.gruppe (0) stimmt immer mit dem gesamten Muster überein. Ihre Spiele tatsächlich bei 1 beginnen, nicht 0.

m.group(0): matches the whole pattern 
m.group(1): first parenthesis 
m.group(2): second set of parenthesis 
m.group(3): third set 

Edit: gemacht Korrektur