Java Stringparsing с помощью регулярных выражений - PullRequest
3 голосов
/ 23 августа 2009

Я пытаюсь разобрать строку с регулярным выражением, чтобы получить параметры из него. Как пример:

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

Мой тестовый код был:

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

Но выводит только "part1" Может ли кто-нибудь дать мне подсказку?

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 августа 2009

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

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

и измените код печати. ​​

if (matcher.find())
    for (int i = 1; i <= matcher.groupCount(); ++i)
        System.out.println(matcher.group(i));
1 голос
/ 23 августа 2009

Ну, вы только когда-либо просили это ... В вашем исходном коде находка смещает совпадение от одного совпадения всего регулярного выражения к следующему, в то время как внутри тела 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...