2009-08-23 13 views
3

Ich versuche, einen String mit einem Regexp zu parsen, um Parameter daraus zu erhalten. Als Beispiel:Java Stringparsing mit Regexp

 
String: "TestStringpart1 with second test part2" 
Result should be: String[] {"part1", "part2"} 
Regexp: "TestString(.*?) with second test (.*?)" 

Mein Testcode war:

 
String regexp = "TestString(.*?) with second test (.*?)"; 
String res = "TestStringpart1 with second test part2"; 

Pattern pattern = Pattern.compile(regexp); 
Matcher matcher = pattern.matcher(res); 
int i = 0; 
while(matcher.find()) { 
    i++; 
    System.out.println(matcher.group(i)); 
} 

Aber es gibt nur die "Teil1" Könnte mir jemand Hinweis geben?

Dank

+0

können Sie die folgende Website benutzen, um Ihre REGEX gegen Testfälle zu überprüfen: https://regex101.com/ – luizfzs

Antwort

2

können einige fix regexp

String regexp = "TestString(.*?) with second test (.*)"; 

und ändern println Code ..

if (matcher.find()) 
    for (int i = 1; i <= matcher.groupCount(); ++i) 
     System.out.println(matcher.group(i)); 
+0

Dank, das war es. – mknjc

1

Nun, man es immer nur fragen zu ... In Ihrem ursprünglichen Code, Der Fund verschiebt den Matcher von einem Match von zum gesamten regulären Ausdruck in den nächsten, während man innerhalb des while-Körpers immer nur eine Gruppe herauszieht. Wenn es in Ihrem String mehrere Übereinstimmungen des regulären Ausdrucks gegeben hätte, hätten Sie gefunden, dass Sie beim ersten Auftreten den "part1" erhalten hätten, beim zweiten Auftreten hätten Sie den "part2" und für Bei jeder anderen Referenz hätten Sie einen Fehler erhalten.

while(matcher.find()) { 

    System.out.print("Part 1: "); 
    System.out.println(matcher.group(1)); 

    System.out.print("Part 2: "); 
    System.out.println(matcher.group(2)); 

    System.out.print("Entire match: "); 
    System.out.println(matcher.group(0)); 
}