2009-08-23 6 views
3

Я пытаюсь разобрать String с Regexp, чтобы получить параметры из него. В качестве примера:Java Stringparsing с Regexp

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

Мой Testcode был:

 
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)); 
} 

Но он выводит только "часть1" Может кто-то дать мне намек?

Благодаря

+0

Вы можете использовать следующий сайт, чтобы проверить REGEX против тестов: https://regex101.com/ – luizfzs

ответ

2

может быть какой-то исправить регулярное_выражение

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

и изменить Println код ..

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

Спасибо, что было. – mknjc

1

Ну, вы только когда-либо попросить его ... В исходном коде, поиск продолжает смещать совпадение от одного совпадения всего регулярного выражения к другому, в то время как в теле while вы только вытаскиваете одну группу. На самом деле, если бы в вашей строке было бы несколько совпадений регулярного выражения, вы бы обнаружили, что для первого появления у вас получилось бы «part1», для второго появления у вас получилось бы «part2», а для любая другая ссылка вы бы получили ошибку.

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)); 
}